Activity
1.图解Activity生命周期:
2.七个方法的含义
- 一、 onCreate :当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工作。
- 二、 onStart :该方法的触发表示所属活动将被展现给用户,可视化。
- 三、 onResume :当一个活动和用户发生交互的时候,触发该方法。
- 四、 onPause :当一个正在前台运行的活动因为其他的活动需要前台运行而转入后台运行的时候,触发该方法。
- 五、 onStop :当一个活动不再需要展示给用户的时候,触发该方法。
- 六、onRestart :当处于停止状态的活动需要再次展现给用户的时候,触发该方法。
- 七、 onDestroy :当活动销毁的时候,触发该方法。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("-----------onCreate");
/*创建 初始化控件*/
}
@Override
protected void onStart() {
super.onStart();
System.out.println("-----------onStart");
/*这些控件被看到*/
}
@Override
protected void onResume() {
super.onResume();
System.out.println("-----------onResume");
/*可以交互 可以点了*/
}
@Override
protected void onPause() {
super.onPause();
System.out.println("-----------onPause");
/*不能交互 */
}
@Override
protected void onStop() {
super.onStop();
System.out.println("-----------onStop");
/*不能看见 控件不可见*/
}
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("-----------onDestroy");
/*销毁控件*/
}
@Override
protected void onRestart() {
super.onRestart();
System.out.println("-----------onRestart");
/*重新运行*/
}
3.当执行某些操作后的Activity的生命周期:
1.当你点击back键的时候
生命周期先onPause>onStop>onDestroy
2.当你点击Home键的时候
生命周期先onPause>onStop,页面完全消失,跑到后台任务中然后onRestart>onStart>onResume页面重新加载,可以人机交互。
3.当有电话进来的时候,生命周期先onPause>onStop,接打电话开始
onRestart>onStart>onResume电话挂断,回到应用
4.当点击关闭屏幕按钮的时候,生命周期先onPause>onStop屏幕关闭
onRestart>onStart>onResume屏幕开启了
5.当从页面A跳转至页面B
A:onPause
B:onCreate>onStart>onResume
A:onStop
当从页面B点击返回按钮是,回到页面A
B:onPause
A:onRestart>onStart>onResume
B:onStop>onDestroy
6.两个Activity之间跳转时必然会执行的是哪几个方法?
当在A Activity里面激活B Activity的时候, A会调用onPause()方法,然后B调用onCreate() ,onStart(), onResume()。
这个时候B覆盖了A的窗体, A会调用onStop()方法。
如果B是个透明的窗口,或者是对话框的样式, 就不会调用A的onStop()方法。
如果B已经存在于Activity栈中,B就不会调用onCreate()方法。
故一定会执行A的onPause()和B的onStart()与onResume()。
7.dialog对话框
7.1 Android组件Dialog
Activity仍位于前台,不影响Activity生命周期
7.2 Theme为Dialog的Activity
Activity A启动对话框onPause
Activity A关闭对话框onResume
4.Activity启动模式,应用
1.standard 标准模式: 每次启动一个 Activity 都会重新创建一个新的实例,不管这个实例是否已经存在,此模式的 Activity 默认会进入启动它的 Activity 所属的任务栈中,按栈的顺序 先进后出
2.SingleTop模式:这种模式会考虑当前要激活的Activity实例在任务栈中是否正处于栈顶,如果处于栈顶则无需重新创建新的实例,会重用已存在的实例,否则会在任务栈中创建新的实例。防止连点 重复页面
浏览器弹出收藏,流氓网站,可以使用指点一次收藏
3.SingleTask模式:检查全栈当A再次被启动时,A会被移到栈顶,位于A上面的Acitivity全部会出栈。程序入口等启动页面,主界面
4.singleinstance 独体模式:因为它会启用一个新的栈结构,将Activity放置于这个新的栈结构中,并保证不再有其他Activity实例进入.单独有一个任务栈,再点的时候任务栈在前面 接电话,挂电话的时候在一个单独任务栈销毁,保证一些页面被单独处理。类似闹钟的提示
5.从Activity返回数据
要从Activity返回数据,需要使用startActivityForResult方法来显示Activity。
1、 从Activity1跳转到Activity2:startActivityForResult(intent,requestCode)
Intent intent = new Intent();
intent = intent.setClass(ActivityIntent.this, AnotherActivity.class);
Bundle bundle = new Bundle();
bundle.putString("string", et_string.getText().toString());
intent.putExtras(bundle);
startActivityForResult(intent,0);
2、 从Activity2返回数据到Activity1:setResult(resultCode,Intent data)
Intent intent = new Intent();
intent = intent.setClass(AnotherActivity.this, ActivityIntent.class);
Bundle bundle = new Bundle();
bundle.putInt("result", "Activity2的处理结果");
intent.putExtras(bundle);
AnotherActivity.this.setResult(RESULT_OK, intent); //RESULT_OK是返回状态码
AnotherActivity.this.finish();
3、 在Activity1中重写onActivityResault方法,接受数据:重写onActivityResult(requestCode,resultCode)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(resultCode) { //根据状态码,处理返回结果
case RESULT_OK:
Bundle bundle =data.getExtras(); //获取intent里面的bundle对象
String result = bundle.getInt("result");
break;
default:
break;
}