Android(安卓)学习系列 - Activity
最近受女票大人之邀要做一个 android app,:- (, 鉴于已经很久没碰过 android ,加上以前写过系列的 android 学习笔记,这里总结下来,权当复习回顾,如果能帮助刚开始学 android 的童鞋就太好了,有误的地方砖家们快给我头上拍一下
Android Activity
关于
每一个activity作为application展现给用户的一个交互界面,应用由多个交互界面组成,那么就可能需要多个activity。
每个activity的交互界面通过ViewGroup组成,activity 之间的通信通过 Intent(动作和动作对应的数据)。 从一个交互界面跳转到另外一个交互界面相当于一个activity跳转到另外一个activity。这个动作携带的数据由Intent来描述。
每一个应用都有一个主界面对应一个 main activity 且每一个activity都需要在manifest中注册才能被使用, 对应到 AndroidManifest.xml
sample activity
public class MyActivity entends Activity { private MyApplication app; @Override public void onCreate(Bundle saveInstanceState) { super.onCreate(saveInstanceState); setContentView(R.layout.main); } }
activity stack
activity的状态由activity 在 activity stack中的位置决定,last-in-first-out的策略
应用的优先级是由activity stack中最高优先级的activity来决定的。
activity 状态
-
active
栈顶得activity
-
pause
可见但是没有focus的activity
-
stopped
不可见的activity
-
inactive
kill掉的activity
生命周期
active lifetime
onResume -> onSaveInstanceState -> onPause -< onRestart
visible lifetime
onStart -> [active life] -> onStop(killble) -> onRestart -<
full lifetime
onCreate -> (stopped? onRestoreInstanceState:pass) -> [visible lifetime] -> onDestroy[killable] -<
重一个activity 回退到另外一个activity的时候,为了保证用户的UI 的状态, activity应该监听这些状态做到数据和UI的保存。
-
onRestoreInstanceState(Bundle savedInstaceState)
只有当activity曾经被kill过才会调用
先调用onCreate 从savedInstanceSate中恢复UI状态
life cycle sample
有3个Acitivity: 分别用One(main), Two(透明的), Three(全屏)
打开应用: onCreate(One) onStart(One) onResume(one) 打开 activity Two: onPause(One) onCreate(Two) onStart(Two) onResume(Two) 返回: onPause(Two) onActivityResult(One) onResume(One) onStop(Two) onDestroy(Two) 打开 activity three: onPause(One) onCreate(Three) onStart(Three) onResume(Three) onStop(One) 返回: onPause(Three) onActivityResult(One) onRestart(One) onStart(One) onResume(One) onStop(Three) onDestroy(Three) // killed three 返回: onPause(One) onStop(One) onDestroy(One)
// 横屏切换的生命周期 打开应用: onCreate() onStart() onResume() 横屏: onSaveInstanceState() onPause() onStop() onDestroy() onCreate() onStart() onRestoreInstanceState() onResume() 竖屏: 两次横屏log结果 // 如果设置了 android:configChanges="orientation" 横屏: onSaveInstanceState() onPause() onStop() onDestroy() onCreate() onStart 竖屏: 一次横屏log结果
不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变
Activity运行时按下HOME键(跟被完全覆盖是一样的):onSaveInstanceState --> onPause--> onStop,再次进入激活状态时: onRestart -->onStart--->onResume (在visible 周期)
Activity的系统子类
ListActivity
MapActivity
ExpandableListActivity
ActivityManager
Activity 继承自 Context
更多相关文章
- Android四大基本组件介绍与生命周期
- Android小心有坑之网络状态监听
- Android(安卓)如何在关于手机界面添加个图片
- android笔记
- Android之Activity生命周期总结(一)
- Android 界面设计工具 DroidDraw
- Android中切换屏幕方向时Activity生命周期函数执行情况分析
- Android界面布局
- 刚刚接触Android,写第一个Hello world 小项目笔记