为什么我的计数器每次调用后都会被重置?

时间:2014-06-28 07:29:04

标签: java android variables button increment

这是我目前的代码

public class ButtonActivity extends Activity {
    int count = 0; 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final Button button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                button.setText("Got Pressed:" + ++count);
                }
        });
    }
}

我的问题为什么在每次调用onDestroy()和随后调用onCreate()之后,计数都会重置。我查看onDestroy()并看到“那是让你的应用程序有最后的机会在活动被破坏之前清理东西但这并不意味着活动将被调用”我最初的想法是实例变量和onCreate()创建我的类ButtonActivity的新实例。任何人都可以证实或驳斥我的初步想法吗?

3 个答案:

答案 0 :(得分:4)

如果您不想重置它,请将其设为static:目前计数器是每个对象

答案 1 :(得分:0)

使count静态可以解决您的问题。 (因为静态成员不属于特定实例)

但更确切地说:onCreate不要创建活动的新实例。实际上:Android-OS会创建一个新实例,并通过调用onCreate(...)为您提供初始化的机会。

而且,更一般地说:您可以确定onCreate() 永远不会在同一个实例上调用两次:如果您看到onCreate()被调用它是因为Android-操作系统刚刚创建了一个活动的新实例(可以出于很多原因,例如屏幕旋转,......)。

有关活动生命周期here的更多信息(可能是您进行Android开发时最重要的概念之一!)

答案 2 :(得分:0)

如此处所示,在您的活动类中存储静态数据是一种不好的做法 应该避免。

为什么?

因为Android可能会破坏与静态数据相关的后台活动 每当感觉资源不足时。因此,您可以在活动中声明静态字段,但不会获得您想要的静态行为,

你能做什么呢?

选项1:

创建自定义Application类并将静态数据放在那里。你会 甚至不必将它声明为静态,因为Application obj是一个单例而且是 保证在应用程序存活期间保留在内存中。

public class MyApplication extends Application {
    private DataClass mydata;

    // probably with a getter & setter
}

请记住在清单中声明您的活动:

<application
        android:name="mypackage.MyApplication"  <--------
        .....

选项2:将您的数据序列化为shared preferences。这就是它们的用途。