我的应用程序中有很多活动(例如A-> B-> C-> D)...我有一个倒数计时器,我正在使用会话超时..我所做的是创建了一个静态计数器...我在活动A开始计数器....如果用户交互计数器重置...这也适用于活动B,C,D ......也适用于完成活动D,活动A得到为了这个,我使用了addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
所以它清除了堆栈......
但是当活动A再次启动时会发生什么..一个新实例与前一个计数器一起创建并继续在后台运行....并且没有在userinteration上重置...我已经完成{{1在onDestroy中....是正确的还是我需要做别的事情?
counter = null
答案 0 :(得分:2)
这是正常的Android行为。
任何时候活动都不是前台活动,它可能会被破坏,具体取决于一些非确定性标准,例如可用内存,运行了多少后台应用程序等。
在你的情况下,活动A正在被销毁,当你返回它时,会创建一个新的实例并调用onCreate()。
通常,您不应该尝试从其他活动访问活动内的某些内容。
您可以扩展您的应用程序类并在其中实例化您的计时器。
public class MyApplication extends Application{
static MyCount counter;
@Override public void onCreate ()
{
super.onCreate();
counter = new MyCount();
}
}
在你的清单中
<application android:name="com.myname.MyApplication"
你应该只在真正需要的时候使用这种技术。请不要将所有内容放在扩展的应用程序类中以简化操作。这真的很糟糕。
最后,如果你的活动被销毁,那么与Android没有合约就会调用onDestroy()。只有你自己完成()活动才能保证。您应该使用onPause()来执行当您的活动进入后台时可能发生的事情(并且可能会被破坏)。
答案 1 :(得分:-1)
您可以通过替换此行来尝试此操作
counter = null;
到
行 counter.cancel();