android Activity启动初始化与实例化Activty对象的用途研究

public class MainActivity extends Activity {
private TextView tv;
public MainActivity() {
// TODO Auto-generated constructor stub
System.out.println("MainActivity");
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("onCreate");
tv=(TextView)findViewById(R.id.tv);
startActivity(new Intent(this,NextActivity.class));
}
public void updateUI(){
tv.setText("update");
}

}


public class NextActivity extends Activity{
public NextActivity() {
// TODO Auto-generated constructor stub
System.out.println("Next");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
MainActivity main=new MainActivity();
main.updateUI();
}
}


以上是2个Activty  打印出书的结果为

MainActivity
 onCreate

NextActivity
 onCreate

然后程序就会报错异常因为在NextActivty中使用了  MainActivity main=new MainActivity();
main.updateUI();  重新创建了一个MainActivty对象。但是由于 我们的textVIew控件没有被初始化,所以会抛出null指针

这个是因为android的activty启动机制有关的。如果通过new MainActivty就能打开一个actity的话显然不安全也不现实。所以只能使用startActivty去打开activty
然后他就回去加载指定的activty类。然后开始初始化执行activty待定的初始化函数。如果是new Mainactyivty 的话 他的actity那些方法就不会被执行。只能被当做一个最简单的类的初始化来处理。

你可能感兴趣的:(java,android)