Android在每次配置更改时都会启动一个异步任务
在阅读了一些关于Android配置的文章之后,我仍然不知道当我将视图从纵向更改为横向时,如何不启动异步任务。我从服务器加载了一些信息,每次旋转手机时都加载是不明智的。我想加载一次。我可以不在清单文件中添加'changeConfig'标志就这样做吗 你需要看看这个 这将解决你提到的所有问题 基本上你需要实施Android在每次配置更改时都会启动一个异步任务,android,configuration,android-asynctask,Android,Configuration,Android Asynctask,在阅读了一些关于Android配置的文章之后,我仍然不知道当我将视图从纵向更改为横向时,如何不启动异步任务。我从服务器加载了一些信息,每次旋转手机时都加载是不明智的。我想加载一次。我可以不在清单文件中添加'changeConfig'标志就这样做吗 你需要看看这个 这将解决你提到的所有问题 基本上你需要实施 public Object onRetainNonConfigurationInstance() 返回所需的数据 然后,您需要调用getLastNonConfigurationInstanc
public Object onRetainNonConfigurationInstance()
返回所需的数据
然后,您需要调用getLastNonConfigurationInstance,如果该值存在,则不从服务器获取它:-)您需要查看以下内容
这将解决你提到的所有问题
基本上你需要实施
public Object onRetainNonConfigurationInstance()
返回所需的数据
然后您需要调用getLastNonConfigurationInstance,如果该值存在,则不要从服务器获取它:-)1将您的AsyncTask作为类的私有实例变量(必须声明为静态内部类或单独的文件) 2在
onRetainConfigurationChanges()中返回AsyncTask实例
3在oResume()
中检索它:
1使AsyncTask成为类的私有实例变量(必须声明为静态内部类或单独的文件)
2在onRetainConfigurationChanges()中返回AsyncTask实例
3在oResume()
中检索它:
不要盲目地启动异步任务。请按照以下说明操作:
在活动变量声明中定义“boolean guard=false”
在“onCreate(…)中执行以下操作:
现在,将以下行添加到您拥有的“onSaveInstanceState(outState)”方法中(如果没有,请立即添加):
outState.put(guardkey, guard); //(*1)
注意:这将防止您在每次更改配置时触发任务。它假定您已从服务器收到信息,并且您已将其正确保存在“活动”中(这意味着您可以在“活动”重新启动时检索该信息)。否则,此解决方案不适合您。不要盲目启动异步任务。请按照以下说明操作:
在活动变量声明中定义“boolean guard=false”
在“onCreate(…)中执行以下操作:
现在,将以下行添加到您拥有的“onSaveInstanceState(outState)”方法中(如果没有,请立即添加):
outState.put(guardkey, guard); //(*1)
注意:这可以防止您在每次更改配置时触发任务。它假定您已经从服务器收到信息,并且您已将其正确地保存在活动中(这意味着您可以在活动重新启动时检索该信息)。否则,此解决方案不适合您。谢谢。现在我知道该怎么办了;)OnRetainOnConfiguration实例()
已被弃用。在Fragment类中使用setRetainInstance(布尔)
,而不是谢谢。现在我知道该怎么办了;)OnRetainOnConfiguration实例()
已被弃用。在Fragment类中使用setRetainInstance(boolean)
,因为每次更改配置时活动都会被销毁,我不应该在onCreate()中检索数据吗?对。为了简单起见,我把它放在onResume中,因为这可能是您想要创建新AsyncTask的地方,但是您是对的,getLastNonConfigurationInstance()应该放在onCreate()中。我卡在“//传入您的活动…”中,我传入了它,但我的列表视图未更新。我看不到上面有任何元素。好像AsyncTask刚刚被杀了……好了,现在没事了。我甚至不必让它静止;)由于每次更改配置时活动都会被销毁,所以我不应该在onCreate()中检索数据吗?对。为了简单起见,我把它放在onResume中,因为这可能是您想要创建新AsyncTask的地方,但是您是对的,getLastNonConfigurationInstance()应该放在onCreate()中。我卡在“//传入您的活动…”中,我传入了它,但我的列表视图未更新。我看不到上面有任何元素。好像AsyncTask刚刚被杀了……好了,现在没事了。我甚至不必让它静止;)
outState.put(guardkey, guard); //(*1)