【问题标题】:Why is my counter being reset each time after call toOncreate?为什么每次调用 toOncreate 后我的计数器都会重置?
【发布时间】:2014-08-19 07:43:09
【问题描述】:

这是我当前的代码

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 的一个新实例。谁能证实或反驳我最初的想法?

【问题讨论】:

    标签: java android variables button increment


    【解决方案1】:

    如果您不希望它重置 - 将其设为 static:当前计数器是针对每个对象的

    【讨论】:

    • 这就是我的想法。 Thx 那么 OnCreate 会创建一个新的 ButtonActivity 实例吗?很难判断代码是否像 Button Activity a = new ButtonActivity()
    【解决方案2】:

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

    但更准确地说:onCreate 不要为您的活动创建新实例。事实上:Android-OS 创建一个新实例并给你一个机会通过调用onCreate(...) 来初始化它。

    而且,更一般地说:您可以确定 onCreate()不会在同一个实例上被调用两次:如果您看到 onCreate() 被调用,那是因为 Android-OS 刚刚创建您的 Activity 的新实例(可以出于多种原因完成,例如屏幕旋转,...)。

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

    【讨论】:

    • 对生命周期做了很多笔记,重要的东西:)
    【解决方案3】:

    按照此处的建议,在活动类中存储静态数据是一种不好的做法 应该避免。

    为什么?

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

    你可以做什么:

    选项 1:

    创建一个自定义应用程序类并将您的静态数据放在那里。你会 甚至不必将其声明为静态,因为 Application obj 是单例并且是 只要应用程序还活着,就保证留在内存中。

    public class MyApplication extends Application {
        private DataClass mydata;
    
        // probably with a getter & setter
    }
    

    记得在清单中声明你的活动:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 2020-05-10
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多