- 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");
- /*重新运行*/
- }
-
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
当在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.1 Android组件Dialog
Activity仍位于前台,不影响Activity生命周期
7.2 Theme为Dialog的Activity
Activity A启动对话框onPause
Activity A关闭对话框onResume
1.standard 标准模式: 每次启动一个 Activity 都会重新创建一个新的实例,不管这个实例是否已经存在,此模式的 Activity 默认会进入启动它的 Activity 所属的任务栈中,按栈的顺序 先进后出
2.SingleTop模式:这种模式会考虑当前要激活的Activity实例在任务栈中是否正处于栈顶,如果处于栈顶则无需重新创建新的实例,会重用已存在的实例,否则会在任务栈中创建新的实例。防止连点 重复页面
浏览器弹出收藏,流氓网站,可以使用指点一次收藏
3.SingleTask模式:检查全栈当A再次被启动时,A会被移到栈顶,位于A上面的Acitivity全部会出栈。程序入口等启动页面,主界面
4.singleinstance 独体模式:因为它会启用一个新的栈结构,将Activity放置于这个新的栈结构中,并保证不再有其他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;
- }
-