Android开发之道(6)Activity的状态转移
2012-03-20 00:00
316 查看
转载请注明来自“柳大的CSDN博客”:http://blog.csdn.net/poechant
1、应用的生命周期
一个 Android 应用中的基本模块,是 Activity。此前我们尝试了如何实现在两个 Activity 之间切换。在切换的时候,Activity 的状态的迁移逻辑由开发者在设计程序时控制。可以说是在控制 Activity 的生命周期,从而控制了 Android 应用的生命周期。
与上一篇博文一样,我们创建两个 Activity 分别命名为 Test1 和 Test2,并通过 Intent 来切换。但是我们要 Override 一些方法,在其中加入 Log,以方便我们观察 Activity 的状态转换:
public class Test1extends Activity {
…
private staticfinal String TAG ="Activity-1";
public void onStart() {
super.onStart();
Log.v(TAG, "onStart");
}
public void onResume() {
super.onResume();
Log.v(TAG, "onResume");
}
public void onPause() {
super.onPause();
Log.v(TAG, "onPause");
}
public void onStop() {
super.onStop();
Log.v(TAG, "onStop");
}
public void onDestroy() {
super.onDestroy();
Log.v(TAG, "onDestory");
}
public void onRestart() {
super.onRestart();
Log.v(TAG, "onRestart");
}
}
其中用到了 Log.v(String tag, String msg),第一个参数 tag 可以方便区分是 Test1 还是 Test2 中的日志。v 表示 verbose,还有 d 表示 debug、i 表示 info、w 表示 warn、e 表示 error。
Test1 和 Test2 之间的切换中也要加入相应的 Log,并且再添加一个结束按钮,用于观察 Activity 被 kill 的过程。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View paramView) {
Intent intent = new Intent();
intent.setClass(Test.this, Test2.class);
startActivity(intent);
Test.this.finish();
}
});
Button button3 = (Button) findViewById(R.id.button3);
button3.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View paramView) {
Test.this.finish();
}
});
}
上面是 Test1 的 onCreate,Test2的类似。其他资源文件和布局文件在此略去。
使用 DDMS 来观察,为了避免“重做车轮”的低效,关于 DDMS 的使用可以参见这位博主的博文《Eclipse调试Android工具集锦之二-DDMS》。我们通过 DDMS 观察到:
启动时载入 Activity1:
Activity1 到 Activity2:
Activity2 结束时:
可以知道 Test1 的状态转换是从 onCreate 的创建开始,到 onStart、onResume 就进入了运行状态。这时如果被切换到 Test2,Test1 就会被 onPause,而 Test2 要经过 onCreate、onStart 和 onResume 的过程。接着,就显示 Test2 不显示 Test1了。但还没完,Test1 还要 onStop 和 onDestory。
当我们的 Activity 很多时,它们的状态控制就很重要了。至于复杂到需要状态机来表述状态转移图那么多而复杂的 Activity 关系的情况,恐怕一般简单的应用型 Android App 还用不到,而且我也 hold 不住的 :P
转载请注明来自“柳大的CSDN博客”:http://blog.csdn.net/poechant
-
$(document).ready(function(){dp.SyntaxHighlighter.HighlightAll('code');});
原文链接:
http://blog.csdn.net/poechant/article/details/7254715
1、应用的生命周期
一个 Android 应用中的基本模块,是 Activity。此前我们尝试了如何实现在两个 Activity 之间切换。在切换的时候,Activity 的状态的迁移逻辑由开发者在设计程序时控制。可以说是在控制 Activity 的生命周期,从而控制了 Android 应用的生命周期。
与上一篇博文一样,我们创建两个 Activity 分别命名为 Test1 和 Test2,并通过 Intent 来切换。但是我们要 Override 一些方法,在其中加入 Log,以方便我们观察 Activity 的状态转换:
public class Test1extends Activity {
…
private staticfinal String TAG ="Activity-1";
public void onStart() {
super.onStart();
Log.v(TAG, "onStart");
}
public void onResume() {
super.onResume();
Log.v(TAG, "onResume");
}
public void onPause() {
super.onPause();
Log.v(TAG, "onPause");
}
public void onStop() {
super.onStop();
Log.v(TAG, "onStop");
}
public void onDestroy() {
super.onDestroy();
Log.v(TAG, "onDestory");
}
public void onRestart() {
super.onRestart();
Log.v(TAG, "onRestart");
}
}
其中用到了 Log.v(String tag, String msg),第一个参数 tag 可以方便区分是 Test1 还是 Test2 中的日志。v 表示 verbose,还有 d 表示 debug、i 表示 info、w 表示 warn、e 表示 error。
Test1 和 Test2 之间的切换中也要加入相应的 Log,并且再添加一个结束按钮,用于观察 Activity 被 kill 的过程。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View paramView) {
Intent intent = new Intent();
intent.setClass(Test.this, Test2.class);
startActivity(intent);
Test.this.finish();
}
});
Button button3 = (Button) findViewById(R.id.button3);
button3.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View paramView) {
Test.this.finish();
}
});
}
上面是 Test1 的 onCreate,Test2的类似。其他资源文件和布局文件在此略去。
使用 DDMS 来观察,为了避免“重做车轮”的低效,关于 DDMS 的使用可以参见这位博主的博文《Eclipse调试Android工具集锦之二-DDMS》。我们通过 DDMS 观察到:
启动时载入 Activity1:
Activity1 到 Activity2:
Activity2 结束时:
可以知道 Test1 的状态转换是从 onCreate 的创建开始,到 onStart、onResume 就进入了运行状态。这时如果被切换到 Test2,Test1 就会被 onPause,而 Test2 要经过 onCreate、onStart 和 onResume 的过程。接着,就显示 Test2 不显示 Test1了。但还没完,Test1 还要 onStop 和 onDestory。
当我们的 Activity 很多时,它们的状态控制就很重要了。至于复杂到需要状态机来表述状态转移图那么多而复杂的 Activity 关系的情况,恐怕一般简单的应用型 Android App 还用不到,而且我也 hold 不住的 :P
转载请注明来自“柳大的CSDN博客”:http://blog.csdn.net/poechant
-
$(document).ready(function(){dp.SyntaxHighlighter.HighlightAll('code');});
原文链接:
http://blog.csdn.net/poechant/article/details/7254715
相关文章推荐
- Android开发之道(6)Activity的状态转移
- Android开发之恢复Activity与fragment的状态
- 【Android 应用开发】Activity 状态保存 OnSaveInstanceState参数解析
- Android开发,Activity的四种状态
- Android开发_如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
- Android开发中,如何防止刚进入activity,EditText处于编辑状态,弹出键盘
- Android开发之InstanceState详解(转)---利用其保存Activity状态
- 【Android 应用开发】Activity 状态保存 OnSaveInstanceState参数解析
- 【Android 应用开发】Activity 状态保存 OnSaveInstanceState参数解析
- 【Android 应用开发】Activity 状态保存 OnSaveInstanceState参数解析
- Android 开发 根据activity前台状态显示通知栏信息或对话框(推送/本地service)
- Android开发:锁屏状态下弹出Activity
- 【Android 应用开发】Activity 状态保存 OnSaveInstanceState參数解析
- Android开发之保存和恢复Activity的状态与数据
- Android开发从入门到放弃(2)保存Activity的状态
- android开发_Intent高级学习(保存Activity状态)
- Android开发中Activity状态的保存与恢复
- 【Android 应用开发】Activity 状态保存 OnSaveInstanceState参数解析
- Android---Activity生命周期状态
- Android开发艺术2之Activity的启动模式