android Activity启动初始化与实例化Activty对象的用途研究
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那些方法就不会被执行。只能被当做一个最简单的类的初始化来处理。
更多相关文章
- [Android] Android打开WIFI或者移动网络
- ClassNotFoundException 案例
- Android(安卓)Recyclerview设置条目属性动画
- Android的线程和线程池
- Android(安卓)AsyncTask异步线程
- Android控制闪光灯的方法(打开与关闭)
- Android的线程和线程池
- java的jvm与android中的虚拟机的区别
- Android(安卓)更新升级版本