Android-Activity详解与汇总
来源:互联网 发布:mac flamingo 价格 编辑:程序博客网 时间:2024/05/16 05:24
注意的是,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 )这些方法即可在你需要处理的时候来调用。
onCreate 方法有一个参数,该参数可以为空( null ),也可以是之前调用 onSaveInstanceState ()方法保存的状态信息。
通常情况下,开发者不需要重写覆盖该方法,在默认的实现中,已经提供了自动保存活动所涉及到的用户界面组件的所有状态信息。
Intent intent =
new
Intent(ReorderFour.
this
, ReorderTwo.
class
);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
standard
"YesDefault. The system always creates a new instance of the activity in the target task and routes the intent to it."singleTop
"ConditionallyIf 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
"NoThe 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
"NoSame 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
Activity跳转页面切换漂亮效果
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 @Override14 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 @Override11 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取出来,程序就完整一些。这也是看你的应用需不需要保存什么,比如你的界面就是读取一个列表,那就不需要特殊记住什么,哦, 没准你需要记住滚动条的位置...
- Android-Activity详解与汇总
- Android-Intent详解与汇总
- Android-Service详解与汇总
- Android-Broadcast详解与汇总
- Android activity属性汇总
- Android 中Fragment与Activity通信大汇总
- android Fragments详解五:与activity通讯
- android Fragments详解五:与activity通讯
- android Fragments详解五:与activity通讯
- android Fragments详解五:与activity通讯 .
- android Fragments详解五:与activity通讯
- android Fragments详解五:与activity通讯
- android Fragments详解五:与activity通讯
- android Fragments详解五:与activity通讯
- android Fragments详解五:与activity通讯
- android Fragments详解五:与activity通讯
- activity与fragment通信汇总
- Android之activity属性汇总
- Oracle 10g 异常处理
- 23种设计模式(10):命令模式
- 关于 EWOULDBLOCK 和 read 返回 -1
- 23种设计模式(11):责任连模式
- C#操作windows服务
- Android-Activity详解与汇总
- Android-Intent详解与汇总
- Android-Service详解与汇总
- Android ListView理解,BaseAdapter
- Android-Broadcast详解与汇总
- Android-网络:Http下载二进制文件(歌曲、更新包、图片)
- Android-网络:Http下载字符串(适用网页、XML)
- Android-Socket多线程应用(聊天室客户端、Handler的简单使用)
- Android-多线程:AsyncTask多线程使用