Java 为什么每次调用OnCreate后都会重置计数器?
这是我当前的代码Java 为什么每次调用OnCreate后都会重置计数器?,java,android,variables,button,increment,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 b
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()并看到“这是为了让你的应用程序在活动被销毁之前有最后的机会清理东西,但这并不意味着活动将被调用”我最初的想法是count是一个实例变量,onCreate()创建了我的类ButtonActivity的一个新实例。有人能证实或反驳我最初的想法吗?如果你不想让它复位-让它成为
static
:当前计数器是每个对象的如果你不想让它复位-让它成为static
:当前计数器是每个对象的让计数
static可以解决你的问题。(因为静态成员不属于特定实例)
但更准确地说:onCreate
不要创建活动的新实例。事实上:Android操作系统创建了一个新实例,并通过调用onCreate(…)
为您提供了初始化它的机会
而且,更一般地说:您可以确保onCreate()
不会在同一实例上被调用两次:如果您看到onCreate()
被调用,那是因为Android操作系统刚刚创建了一个新的活动实例(可以出于许多原因,比如屏幕旋转,…)
更多关于活动生命周期的信息(可能是进行Android开发时需要了解的最重要概念之一!)使
count
静态将解决您的问题。(因为静态成员不属于特定实例)
但更准确地说:onCreate
不要创建活动的新实例。事实上:Android操作系统创建了一个新实例,并通过调用onCreate(…)
为您提供了初始化它的机会
而且,更一般地说:您可以确保onCreate()
不会在同一实例上被调用两次:如果您看到onCreate()
被调用,那是因为Android操作系统刚刚创建了一个新的活动实例(可以出于许多原因,比如屏幕旋转,…)
更多关于活动生命周期的信息(可能是进行Android开发时需要了解的最重要的概念之一!)如本文所述,在活动类中存储静态数据是一种不好的做法 应该避免 为什么? 因为Android可能会破坏后台活动及其静态数据 每当它感到资源不足时。因此,您可以在活动中声明静态字段,但无法获得您想要的静态行为 您可以做些什么: 备选案文1: 创建一个自定义应用程序类并将静态数据放在那里。你会 甚至不必将其声明为静态,因为应用程序obj是单例的,并且 保证在应用程序处于活动状态时一直保留在内存中
public class MyApplication extends Application {
private DataClass mydata;
// probably with a getter & setter
}
请记住在清单中声明您的活动:
<application
android:name="mypackage.MyApplication" <--------
.....
。这就是它们的用途。如本文所建议的,在活动类中存储静态数据是一种不好的做法
应该避免
为什么?
因为Android可能会破坏后台活动及其静态数据
每当它感到资源不足时。因此,您可以在活动中声明静态字段,但无法获得您想要的静态行为
您可以做些什么:
备选案文1:
创建一个自定义应用程序类并将静态数据放在那里。你会
甚至不必将其声明为静态,因为应用程序obj是单例的,并且
保证在应用程序处于活动状态时一直保留在内存中
public class MyApplication extends Application {
private DataClass mydata;
// probably with a getter & setter
}
请记住在清单中声明您的活动:
<application
android:name="mypackage.MyApplication" <--------
.....
。这就是他们的目的。我就是这么想的。Thx So OnCreate创建了ButtonActivity的新实例?很难说代码是否像Button Activity a=new ButtonActivity()那样直截了当,我就是这么想的。Thx So OnCreate创建了ButtonActivity的新实例?很难说代码是否像按钮活动a=new ButtonActivity()那样,在生命周期中做了很多笔记,重要的:)在生命周期中做了很多笔记,重要的:)