注意的是,Activity的使用需要在Manifest文件中添加相应的<Activity>,并设置其属性和intent-filter。
1、关于生命周期
Activty的生命周期的也就是它所在进程的生命周期。
<ignore_js_op>
一个Activity的启动顺序:
onCreate()——>onStart()——>onResume()
当另一个Activity启动时:
第一个Activity onPause()——>第二个Activity onCreate()——>onStart()——>onResume() ——>第一个Activity onStop()
当返回到第一个Activity时:
第二个Activity onPause() ——> 第一个Activity onRestart()——>onStart()——>onResume() ——>第二个Activity onStop()——>onDestroy()
一个Activity的销毁顺序:
(情况一)onPause()——><Process Killed>
(情况二)onPause()——>onStop()——><Process Killed>
(情况三)onPause()——>onStop()——>onDestroy()
PS:因此应在onPause()和onResume()做保存或者暂停动作!
每一个活动( Activity )都处于某一个状态,对于开发者来说,是无法控制其应用程序处于某一个状态的,这些均由系统来完成。
但是当一个活动的状态发生改变的时候,开发者可以通过调用 onXX() 的方法获取到相关的通知信息。
在实现 Activity 类的时候,通过覆盖( override )这些方法即可在你需要处理的时候来调用。
Intent intent =
new
Intent(ReorderFour.
this
, ReorderTwo.
class
);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
Use Cases | Launch Mode | Multiple Instances? | Comments |
---|---|---|---|
Normal launches for most activities | "standard " |
Yes | Default. The system always creates a new instance of the activity in the target task and routes the intent to it. |
"singleTop " |
Conditionally | If an instance of the activity already exists at the top of the target task, the system routes the intent to that instance through a call to itsonNewIntent() method, rather than creating a new instance of the activity. |
|
Specialized launches (not recommended for general use) |
"singleTask " |
No | The system creates the activity at the root of a new task and routes the intent to it. However, if an instance of the activity already exists, the system routes the intent to existing instance through a call to itsonNewIntent() method, rather than creating a new one. |
"singleInstance " |
No | Same as "singleTask" , except that the system doesn't launch any other activities into the task holding the instance. The activity is always the single and only member of its task. |
Service通过广播Broadcast更新Activity UI
http://www.eoeandroid.com/thread-68005-1-1.html
Android中Activity、Service和线程之间的通信(包含Handler)Android线程交互(Handler+Thread 和 AsyncTask)博客园包含AsyncTask例子、知识汇总包含Handler例子
http://blog.csdn.net/super005/article/details/5827298
http://www.eoeandroid.com/thread-173334-1-1.html
android 再按一次后退键退出应用程序
1 private static Boolean isExit = false; 2 private static Boolean hasTask = false; 3 Timer tExit = new Timer(); 4 TimerTask task = new TimerTask() { 5 6 @Override 7 public void run() { 8 isExit = false; 9 hasTask = true; 10 } 11 }; 12 13 @Override 14 public boolean onKeyDown(int keyCode, KeyEvent event) { 15 System.out.println("TabHost_Index.java onKeyDown"); 16 if (keyCode == KeyEvent.KEYCODE_BACK) { 17 if(isExit == false ) { 18 isExit = true; 19 Toast.makeText(this, "再按一次后退键退出应用程序", Toast.LENGTH_SHORT).show(); 20 if(!hasTask) { 21 tExit.schedule(task, 2000); 22 } 23 } else { 24 finish(); 25 System.exit(0); 26 } 27 } 28 return false; 29 }
捕获返回键,弹出是否确定退出应用的对话框
1 @Override 2 public boolean onKeyDown(int keyCode, KeyEvent event) { 3 if(keyCode == KeyEvent.KEYCODE_BACK){ 5 new AlertDialog.Builder(this) 6 .setIcon(R.drawable.icon) 7 .setTitle(R.string.app_name) 8 .setMessage(R.string.quit_desc) 9 .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 10 @Override 11 public void onClick(DialogInterface dialog, int which) {}}) 14 .setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() { 15 public void onClick(DialogInterface dialog, int whichButton) { 16 finish(); } 18 }).show(); 19 20 return true; 21 }
22
23 else{ 22 return super.onKeyDown(keyCode, event); 23 } 24 }
让Activity变成一个窗口:Activity属性设定
Xml代码
android :theme="@android:style/Theme.Dialog"
android:theme="@android:style/Theme.Dialog"
让Activity变成半透明:Activity属性设定
android:theme="@android:style/Theme.Translucent"
android:theme="@android:style/Theme.Translucent"
五、常见问题
你后台的Activity被系统回收怎么办:onSaveInstanceState 。
当你的程序中某一个Activity A 在运行时中,主动或被动地运行另一个新的Activity B
这个时候A会执行。
Java代码
public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putLong("id", 1234567890); }
B 完成以后又会来找A, 这个时候就有两种情况,一种是A被回收,一种是没有被回收,被回
收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上参数
savedInstanceState,没被收回的就还是onResume就好了。
savedInstanceState是一个Bundle对象,你基本上可以把他理解为系统帮你维护的一个Map对象。在onCreate()里你可能会用到它,如果正常启动onCreate就不会有它,所以用的时候要判断一下是否为空。
Java代码
if(savedInstanceState != null){
long id = savedInstanceState.getLong("id");
}
if(savedInstanceState != null){ long id = savedInstanceState.getLong("id");}
就像官方的Notepad教程 里的情况,你正在编辑某一个note,突然被中断,那么就把这个note的id记住,再起来的时候就可以根据这个id去把那个note取出来,程序就完整一些。这也是看你的应用需不需要保存什么,比如你的界面就是读取一个列表,那就不需要特殊记住什么,哦, 没准你需要记住滚动条的位置...