从Home启动时,应用程序未恢复

时间:2014-01-21 12:37:28

标签: android lifecycle activity-lifecycle

我试图根据Android Guidelines来控制我的停止/重启行为,但这有点棘手。我希望我的应用程序在最小化并点击启动器图标后恢复状态。

当前行为使得我可以在应用程序之外进行HOME,当用户使用长按列表返回时,一切都按预期运行。现在,尝试返回点击应用程序图标会启动默认活动,它不会将onRestoreInstanceState考虑在内,同时保持旧任务的亲密关系在他们的后台堆栈中打开。

活动有onCreate,onResume,onSavedInstanceState重写,调用它们的super,并且类型为SingleInstance。

3 个答案:

答案 0 :(得分:3)

在我的一个应用程序开发期间,我遇到了类似的问题,其中app有单个活动,需要保存一些状态值(通常是字符串,布尔值)onpause。我会告诉你我是如何处理它的,我希望它对你也有用。

 protected void onPause() {
         super.onPause(); 
            saveState();

   }

  protected void onResume() {  
    super.onResume();       
    retrieveState();
  }

不要忘记改变焦点...

   @Override
    public void onWindowFocusChanged(boolean hasFocus) {  
      super.onWindowFocusChanged(hasFocus);
      if(hasFocus) {            
        retrieveState(); 
      }
      else { saveState(); } 
  }

现在保存并检索数据

 public void saveState()
 {                  

     SharedPreferences settings = getSharedPreferences(WEBSTATE, 0);
 SharedPreferences.Editor editor = settings.edit();

    editor.putString(CURRENT_URL_STATE, "some url");
    editor.putInt(FILECOUNT, 10);
    /* any other content... */
   editor.commit();  

  }  


 public void retrieveState()
 {

    SharedPreferences settings = getSharedPreferences(WEBSTATE, 0);
    String current_url = settings.getString(CURRENT_URL_STATE, "");

    int count = settings.getInt((FILECOUNT, 0);

    /*use these value as per requier.. */
  }

答案 1 :(得分:0)

  

目前的行为使得我可以将HOME从应用程序中移出,并且当时   用户使用长按列表返回所有行为   预期。现在,尝试返回点击应用程序图标启动   默认活动,它没有考虑到RestoreInstanceState,   同时保持旧任务的亲密关系在他们的后台开放。

让我们说你有2个活动:A和B.活动A是你的入口点,所以当你点击app图标时(实际上这是错误的陈述,因为这是活动图标,而不是应用程序图标)您启动活动A.现在您必须进行活动B并按HOME。当您现在打开最近的列表时,您将看到活动B,并且将能够返回它。但是当你点击你的应用程序图标时#34;在启动器屏幕上,您将输入活动A.这是正常和正确的行为。另请注意,savedInstanceState并非您最常想到的应用程序的整体状态。

另请注意,您的Activity类可以多次实例化,这取决于您的应用程序架构,也会导致不正确的导航行为。您可以尝试使用清单文件中的android:launchMode来控制此操作(您将find android documentation here)。

最后,如果可能,请考虑重新处理您的应用程序以使用Fragments而不是多个活动 - 这将简化控制应用程序流程。

答案 2 :(得分:0)

不确定这是否是你想要做的,但我有一个类似的问题,我想要一个基本活动返回,而我无法从SingleInstance获得所需的结果,我定义了一个新的活动,这是主要推出:

   <intent-filter>
       <action android:name="android.intent.action.MAIN"/>
       <category android:name="android.intent.category.LAUNCHER"/>
   </intent-filter>

通过该活动,我使用所需的FLAG clear-top启动了我想要的活动,并完成了主要的启动活动。