2013-11-22 63 views
0

我創建了一個帶視頻縮略圖的列表視圖 我已經知道如何使用媒體信息以及如何列出它。使用意向向其他活動發送數據的最佳做法?

我的問題是什麼是最好的編程實踐 發送媒體信息(如String),整型,甚至一個位圖?

Parcelable或Seralizeable或光標只是它的ID?

我想最大限度地發揮我的應用我的速度性能,

他們說parce是好的,一些seializeable但其他編程人員 說其最好只只通過ID或超過使用對象 等的光標位置..

哪個好這3個?

  1. Parcelable

  2. Seralizeable

  3. 只是ID光標等,或者該列表的位置?

例如:

活動過程

@Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     // MOVE TO CLICK POSITION 
     videoCursor.moveToPosition(position); 

     // GET THE COLUMN INDEX OF THE FILEPATH, TITLE, ARTIST, DURATION 
     videoPathColumnIndex = videoCursor 
       .getColumnIndexOrThrow(MediaStore.Video.Media.DATA); 
     videoTitleColumnIndex = videoCursor 
       .getColumnIndexOrThrow(MediaStore.Video.Media.TITLE); 
     videoArtistColumnIndex = videoCursor 
       .getColumnIndexOrThrow(MediaStore.Video.Media.ARTIST); 
     videoDurationColumnIndex = videoCursor 
       .getColumnIndexOrThrow(MediaStore.Video.Media.DURATION); 
     videoImageColumnIndex = videoCursor.getInt(videoCursor 
       .getColumnIndexOrThrow(MediaStore.Video.Media._ID)); 

     // LIST THE DATA FROM STRING OF THE COLUMNINDEX OF THE VIDEOCURSOR POSITION 
     videoPath = videoCursor.getString(videoPathColumnIndex); 
     videoTitle = videoCursor.getString(videoTitleColumnIndex); 
     videoArtist = videoCursor.getString(videoArtistColumnIndex); 
     videoDuration = videoCursor.getString(videoDurationColumnIndex); 

     // START THE NEW INTENT ACTIVITY AND PASS SOME MEDIA INFO 
     videoIntent = new Intent(this, Play.class); 
     videoIntent.putExtra(KEY_VIDEO_PATH, videoPath); 
     videoIntent.putExtra(KEY_VIDEO_TITLE, videoTitle); 
     videoIntent.putExtra(KEY_VIDEO_ARTIST, videoArtist); 
     videoIntent.putExtra(KEY_VIDEO_DURATION, videoDuration); 

     startActivity(videoIntent); 
    } 

這是我的代碼,我可以給標題,路徑,藝術家,我也可以通過路徑播放的視頻,如果我想使用id發送VideoThumbnail只有如何使用putExtra併發送ID並從ACTIVITY B獲取並使用數據?

回答

1

如果你的對象在數據庫中已經持續存在,那麼當然與ID去。如果不是,可編輯建議超過可序列化的,因爲它是更高性能。在這篇博客文章http://www.developerphil.com/parcelable-vs-serializable/中,作者做了一些基準來比較這兩種方法。

TL; DR實現Serializable接口是慢,因爲它使用反射罩下。

By the way Bitmap already implements the Parcelable interface,但要將重物從一個活動傳遞到另一個時要小心,因爲這需要大量內存。這真是一個判斷,你必須做出。

+0

確定il嘗試身份證,如果我想從光標傳遞videothumbnail圖像的身份證我如何從其他活動獲得身份證並將其重新命名爲新的位圖?你可以給我簡單的代碼,thnks! –

1

用最少的就可以了,還因爲它使得它更清楚你實際上發送。如果要發送的數據由Bundle方法之一涵蓋,請使用該方法。例如,如果您有String,請使用putString。如果您的枚舉或ID可以在新的活動或片段中使用,請使用putInt(enum上的ordinal())。

只有當你有例如一個自定義對象真的需要一個Parcelable對象。一些Android特定的類已經實現了Parcelable接口。我會避免Serializable,因爲它比較慢,並且通常不能真正控制序列化。

+0

所以發送原始數據類型是不是比像ImageView,Bitmap的對象?所以如果它的重il只使用該相應列表的ID,以便將接收的類只會從ID創建一個新的對象庫? –

+0

如果你的數據持久存在,它肯定總是不那麼沉重(因此在內存中更容易/更快),只是將數據的ID作爲基本類型傳遞,並讓目標在必要時獲取它,而不是傳遞數據本身,是的。只有當它是例如一個持久/ CPU密集的過程來獲取您擁有的數據,而不是您可能會重新考慮的過程。 – Blacklight

+0

確定il顯示我的代碼嘗試查看如何發送id並接收並獲取其他活動的值。我會從最頂層的例子中展示你 –

相關問題