2012-02-16 74 views
3

在我的Android应用程序中,我已经从互联网加载了一些图像和数据到可扩展列表视图中。并且我已经处理了如下的方向更改。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是已经习惯了从网上得到的数据AsynacTask和它加载之前加载的方向更改后的数据(不包括从互联网上获取新数据再次),但它是非常缓慢。是否有任何其他方式有效地做到这一点?

+0

你见过[this](http://developer.android.com/resources/articles/faster-screen-orientation-change.html)吗? – Ghost 2012-02-16 10:01:44

+0

是的,我已经看到,根据我已经使用onRetainNonConfigurationInstance()和getLastNonConfigurationInstance()方法如上。它工作正常,但速度很慢,所以我必须知道另一种方法来有效地做到这一点。 – 2012-02-16 10:18:54

+0

是** isOrentationChnged **一个静态变量?你确定LongRunning()。execute()是否在方向改变时调用**而不是**? – 2012-03-22 17:10:59

回答

2

最后,我得到了简单的方法来加速活动中的方向变化。

IDEA:

每个方向的变化将重新创建活动的解决方案,这一点,你可以通过添加如下代码行活动代码应用程序的清单文件避免活动娱乐。

android:configChanges="orientation|keyboardHidden|screenSize" 

上面的一行避免了方向改变后的活动重新创建,所以你的活动对方向改变的反应会更加敏感。

0

按照David的说法,除非isOrentationChnged设置为静态,当您重新创建活动时它将始终为false。

你并不真的需要一个变量反正只是这样做在的onCreate:如果

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

这种方式被重新创建活动,则您的数据将被使用,否则longrunning操作运行。

顺便说一句,我没有看到你在你的Adapter构造函数中使用arrGroupelements。