在android中处理静态变量

时间:2012-12-05 07:17:42

标签: android

我的应用程序中有很多活动(例如A-> B-> C-> D)...我有一个倒数计时器,我正在使用会话超时..我所做的是创建了一个静态计数器...我在活动A开始计数器....如果用户交互计数器重置...这也适用于活动B,C,D ......也适用于完成活动D,活动A得到为了这个,我使用了addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)所以它清除了堆栈......

但是当活动A再次启动时会发生什么..一个新实例与前一个计数器一起创建并继续在后台运行....并且没有在userinteration上重置...我已经完成{{1在onDestroy中....是正确的还是我需要做别的事情?

counter = null

2 个答案:

答案 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();