使用意图将数据发送到另一个活动的最佳做法?

时间:2013-11-22 07:39:04

标签: android android-intent cursor

我用视频缩略图创建了一个列表视图 我已经知道如何使用媒体信息以及如何列出它。

我的问题是什么是最好的编程实践 发送媒体信息,如String,Integer,甚至是Bitmap?

Parcelable或Seralizeable还是光标上的ID?

我想最大化我的应用程序的速度性能

他们说parce很好,有些可以兼容,但是其他的程序员 尽量只传递游标的ID或位置而不是使用对象 等。

这3个好吗?

  1. Parcelable

  2. Seralizeable

  3. 只是ID光标等,或列表的位置?

  4. 示例:

    ACTIVITY A

    @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并使用了数据?

2 个答案:

答案 0 :(得分:1)

如果您的对象已经存在于数据库中,那么当然要使用ID。如果没有,建议使用 Parcelable 而不是 Serializable ,因为它更高效。在这篇博文http://www.developerphil.com/parcelable-vs-serializable/上,作者做了一些基准来比较这两种方法。

TL; DR实现Serializable接口的速度较慢,因为它使用了反射。

By the way Bitmap already implements the Parcelable interface,但是在将重物从一个活动传递到另一个活动时要小心,因为它需要大量内存。这真是一个你必须做出的判断。

答案 1 :(得分:1)

尽可能少地使用,也因为它使您实际发送的内容更清晰。如果您要发送的数据由Bundle方法之一覆盖,请使用该方法。例如,如果您使用String putString。如果您有可在新活动或片段中使用的枚举或ID,请使用putInt(枚举时带有ordinal())。

只有你有例如一个自定义对象真的需要一个Parcelable对象。一些Android特定类已经实现了Parcelable接口。我会避免使用Serializable,因为它较慢,而且你通常无法真正控制序列化。