Android 屏幕方向变换缓慢?

3

我在我的Android应用程序中加载了一些来自互联网的图片和数据到可扩展列表视图中。并且我已经按照以下方式处理了方向变化。

@Override
public Object onRetainNonConfigurationInstance() {
    isOrentationChnged=true; 
    final Object data = arrGroupelements;
    return data;

}

在我的onCreate()中
     if(!isOrentationChnged){
    new LongRunning().execute();

}else{

      if((String[][])getLastNonConfigurationInstance()==null){
        new LongRunning().execute();
      }else{
    arrGroupelements= (String[][]) getLastNonConfigurationInstance();
    expList.setAdapter(new ExpAdapter(cont));
      }
}

isOrentationChnged=false;

LongRunning是一个异步任务,用于从互联网上获取数据,并在方向改变后加载先前加载的数据(无需再次从互联网获取新数据),但速度非常慢。是否有更有效的替代方法?


你看过这个吗? - Ghost
是的,我已经看到了。根据那个,我已经像上面那样使用了onRetainNonConfigurationInstance()和getLastNonConfigurationInstance()方法。它可以正常工作,但非常慢,所以我必须知道一种更有效的替代方法。 - Dinesh Anuruddha
isOrentationChnged是一个静态变量吗?您确定当屏幕方向改变时,LongRunning().execute()不会被调用吗? - David Wasser
2个回答

3

我终于找到了一个简单的方法来加快活动中方向变化的速度。

想法:

每次方向变化时,都会重新创建活动。为了解决这个问题,您可以通过在应用程序的清单文件中向活动标记添加以下代码行来避免活动重建。

android:configChanges="orientation|keyboardHidden|screenSize"

上述代码避免了在屏幕方向变化后重新创建活动,从而使您的活动在屏幕方向变化时更加响应。


0
根据David的说法,除非将isOrentationChnged设置为静态,否则在重新创建Activity时它始终为false。
其实你并不需要那个变量,在onCreate中可以这样做:
arrGroupelements = (String[][]) getLastNonConfigurationInstance();
if (null==arrGroupelements){
  new LongRunning().execute();
} else {     
  expList.setAdapter(new ExpAdapter(cont));
}

这样,如果活动正在重新创建,则将使用您的数据,否则长时间运行的操作将运行。

顺便说一下,我没有看到您在适配器构造函数中使用 arrGroupelements。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接