Android在每次配置更改时都会启动一个异步任务

Android在每次配置更改时都会启动一个异步任务,android,configuration,android-asynctask,Android,Configuration,Android Asynctask,在阅读了一些关于Android配置的文章之后,我仍然不知道当我将视图从纵向更改为横向时,如何不启动异步任务。我从服务器加载了一些信息,每次旋转手机时都加载是不明智的。我想加载一次。我可以不在清单文件中添加'changeConfig'标志就这样做吗 你需要看看这个 这将解决你提到的所有问题 基本上你需要实施 public Object onRetainNonConfigurationInstance() 返回所需的数据 然后,您需要调用getLastNonConfigurationInstanc

在阅读了一些关于Android配置的文章之后,我仍然不知道当我将视图从纵向更改为横向时,如何不启动异步任务。我从服务器加载了一些信息,每次旋转手机时都加载是不明智的。我想加载一次。我可以不在清单文件中添加'changeConfig'标志就这样做吗

你需要看看这个

这将解决你提到的所有问题

基本上你需要实施

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)