让屏幕换向更快

来源:互联网 发布:用友nc数据备份 编辑:程序博客网 时间:2024/04/29 20:37


由于android的硬件配置改变后,当前运行的activity需要reload。因此,如果你的app需要展示很多从服务器下载的图片,要是得reload该是多遭的体验啊,或许你想把图片cache到SD卡里面,但是每次都这样岂不是很浪费资源且麻烦吗。为此,android提供了onRetainNonConfigurationInstance()方法,它会保证当且仅当在配置变化的时候做些你想做的事,以保证体验。如下例:

@Override
public Object onRetainNonConfigurationInstance() {
    final LoadedPhoto[] list = new LoadedPhoto[numberOfPhotos];
    keepPhotos(list);
    return list;
}

在新的activity onCreate方法里面,你所需做的就是通过调用getLastNonConfigurationInstance方法来拿回你的对象。

private void loadPhotos() {
    final Object data = getLastNonConfigurationInstance();
   
    // The activityis starting for the first time, load the photos from Flickr
    if (data == null) {
        mTask = new GetPhotoListTask().execute(mCurrentPage);
    } else {
        // The activity was destroyed/created automatically, populate the grid
        // of photos with the images loaded by the previous activity
        final LoadedPhoto[] photos = (LoadedPhoto[]) data;
        for (LoadedPhoto photo : photos) {
            addPhoto(photo);
        }
    }
}

当你通过onRetainNonConfigurationChange传递对象时得非常小心,如果对象绑定了context-activity,那么你会泄漏activity的所有views和资源,这意味着你永远都不要传递view、drawable、adapter等等。最后使用这个方法的前提是要retain的数据都是expensive to load的。