Activiti与Intent笔记
Android系统的四大组件:
- 活动(Activity)
- 服务(Serview)
- 广播接收器 (Broadcast Receiver)
- 内容提供器(Content Provider)
Activity
使用setContentView(View)放置View
生命周期:
onCreate(); 活动第一次被创建是调用,可以做常规静态设置,还提供一个Activity先前保存页面的Bundle
onStart();活动由不可见到可见时调用,已可见,但无法与用户进行交互。
onResume();活动将开始与用户进行交互
onPause();活动失去前台状态,不再可聚焦,但用户依然可见
onStop();活动对用户不可见
onRestart();活动由停止状态到运行状态
onDestory();活动被销毁前最后调用的方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vDiPsXvB-1658112370891)(C:\Users\wangwei.guo\Desktop\郭王伟笔记\郭王伟笔记\md图片存储\4034970a304e251fe331f2d8eb321b1f7e3e530c.jpeg)]
流程:
- Activity启动:onCreate()->onStart()->onResume().
- 点击Home返回主界面:onPause()->onStop()
- 点击Home返回主界面(如果新的Activity为透明):onPause() 不调用onStop
- 在次回到原Activity:onRestart()->onStart()->onResume()
- 退出当前Activity:onPause()->onStop()->onDestroy()
- 当执行到onPause()方法Activity失去焦点,重新返回时调用onResume()
- 当执行到onStop方法,重新返回会执行onRestart(),如果进程被销毁,重新执行onCreate()方法
- A、B之间切换:A->B,onPause(A)->onCreate(B)->onStart(B)->onResume(B)->onStop(A)。按Back键返回A:onPause(B)->onReStart(A)->onStart(A)->onResume(A)->onStop(A)
- A、B之间切换(如果B为透明主题)A-B onPause(A)->onCreate(B)->onStart(B)->onResume(B) 。返回AonPause(B)->onResume(A)->onStop(B)->onDestory(B)
onPause()数据保存
将关键的持久性数据写入存储,如果需要保存用户输入的数据,在onPuase()中
当系统销毁Activity以恢复内存时,Activity对象被破坏,因此系统不能完好无损地恢复它的活动状态。可以使用onSaveInstanceState(),onSaveInstanceState()方法会在Activity被破坏前系统自动调用。
系统将重新创建活动并将其Bundle传递给Activity的onCreate()和onRestoreInstanceState()
横竖屏切换对生命周期的影响
横竖屏切换涉及到的是Activity的android:configChanges属性:
- orientation 取消横竖屏的影响
- keyboardHidden 取消键盘的影响
- screenSize 消除屏幕大小的影响
当我们设置Activity的android:configChanges属性为orientation或者orientation|keyboardHidden或者不设置这个属性的时候,会重新加载Activity的各个生命周期.
onPause()->onStop()->onDestory()->onCreate()->onStart()->onResume()
当我们设置Activity的android:configChanges属性为orientation|screenSize或者orientation|screenSize|keyboardHidden,即设置了orientation|screenSize属性之后,在进行横竖屏切换的时候会调用方法onConfigurationChanged,而不会重新加载Activity的各个生命周期.
活动的启动模式
-
standard:默认,每启动一个活动,都会在返回栈中入栈
-
singleTop:如果要启动的活动已处于栈顶,直接使用,同时它的OnNewIntent方法会被调用。如果不在栈顶,重新创建一个实例
-
singleTask:每次启动活动时在返回栈中查看是否存在,如果存在则直接使用该实例,保证返回栈中的唯一。系统会调用其OnNewIntent方法,即使不在栈顶,则把此活动之上的所有活动出栈。如果没有发现就会创建一个新的活动实例。具备singleTask模式的所有的特性,该模式下会启用一个新的单独的返回栈管理这个活动,可以实现程序间共享该活动
-
singleInstance
可以在AndroidManifest.xml中通过给标签指定android:launchMode属性来选择启动模式
Intent
- 活动间跳转
- 携带数据
- 启动活动
- 启动服务
- 播放广播·
显示的启动活动:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
隐式Intent:
返回数据给上一个活动:
FirstActivity中,通过startActivityForResult()方法,第一个参数是Intent,第二个是请求码,用于在之后的回调中判断数据的来源
Intent intent= new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);
接着在SecondActivity中给点击事件添加返回数据的逻辑:
Intent intent = new Intent();
intent.putExtra("data_return","Hello FirstActivity");
setResult(RESULT_OK, intent);
// 专门用于向上一个活动返回数
finish();
SecondActivity销毁后(如点击了按钮或者按下Back键),由于使用了startActivityForResult()方法来启动SecondActivity,会回调FirstActivity中的onActivityResult()方法,所有必须重写此方法:
若在SecondActivity中不是通过点击按钮,而是通过按下Back键回到FirstActivity,这样需要在SecondActivity中重写onBackPressed()方法来返回数据: