2011-04-11 87 views
1

在我的主要活动中,在onStop下,我设置了myVar = true。在onResume中,我检查myVar是否为true并执行某些操作。onStop没有被调用...主页按钮按下

如果您在我的主要活动中点击主页按钮并从主屏幕/应用程序抽屉再次启动它,它可以正常工作。

如果您在不同的活动中点击主页按钮并从主屏幕/应用程序抽屉重新启动主页按钮,它会显示主要活动,因为我在主要活动和android:finishOnTaskLaunch上设置了clearTaskOnLaunch =“true” =“true”设置在我的其他活动上。但是,当主按钮被按下时,它在主要活动中看起来并没有打到onStop。

我开始结果的其他活动。如果结果代码= result_ok或result_canceled,我设置myVar = false。但是...如果home按钮被按下,它不应该设置结果并执行onActivityResult。

任何想法如何解决这个问题?

编辑:

above onCreate.. I set startNew = true; 
@Override 
    public void onStop() { 
     super.onStop(); 
     startNew = true; 
    } 

    @Override 
    public void onRestart() { 
     super.onRestart(); 
     if (startNew) { 
      getCurrentDate(0); 
      updateDisplay(); 
      fillData(); 
     } 
    } 

其他唯一的参考startNew,是我的onActivityResult方法,如果这是从我的主要活动推出的活动返回要么RESULT_OK或RESULT_CANCELED,我设置startNew =假。

我试图确保每次我的应用程序从主屏幕/应用程序抽屉启动时,它都会运行这3种方法。

回答

3

转到onPause(),因为根据文档,onStop()在某些情况下不会被调用。

+0

我改变它是安全的,但我从来没有注意到两者之间的区别,我用它的东西。 – Roger 2011-04-11 18:21:25

+2

根据文档,onStop()不保证被调用,但onPause()是。从Honeycomb开始,这改变了... onStop()现在将被保证被调用,但是如果你想支持运行早期版本的设备,你需要相应的编码:http://developer.android.com/reference/android/app /Activity.html – BonanzaDriver 2011-04-11 20:44:25

+2

每*什么*文档? – 2014-08-12 22:46:59

1

你想在onStop上做什么?通常你想在onPause方法中做到这一点。在生命周期中越接近onDestroy,在您的Activity被销毁以恢复内存之前,该方法被调用的可能性就越小。

+0

我已添加更多详情。我在做的事似乎也一样,onStop,onPause。 – Roger 2011-04-11 18:09:44

+0

由于活动的无状态性质,这在Android中很难实现。您故意不知道活动发布的来源。因此,我所看到的最好的方法是对应用程序进行子类化,在那里放置标志,并更新子活动完成方法中的标志。这样,如果从托盘启动,则不存在子活动,因此标志保持其原始状态。如果子活动结束,则设置标志,并且您知道您不需要重新使用您的方法。希望这是有道理的。 – James 2011-04-11 18:16:37

+0

我不一定需要知道它从何处启动。我只需要确保每当主要活动进入视图时都会触发这3种方法,除非由于我为结果,setResult和结束而开始的活动而进入视图。唯一一次不起作用的是在不在主要活动中的情况下按下主页按钮。 – Roger 2011-04-11 18:24:09