最近受女票大人之邀要做一个 android app,:- (, 鉴于已经很久没碰过 android ,加上以前写过系列的 android 学习笔记,这里总结下来,权当复习回顾,如果能帮助刚开始学 android 的童鞋就太好了,有误的地方砖家们快给我头上拍一下
Android Activity
关于
每一个activity作为application展现给用户的一个交互界面,应用由多个交互界面组成,那么就可能需要多个activity。
每个activity的交互界面通过ViewGroup组成,activity 之间的通信通过 Intent(动作和动作对应的数据)。 从一个交互界面跳转到另外一个交互界面相当于一个activity跳转到另外一个activity。这个动作携带的数据由Intent来描述。
每一个应用都有一个主界面对应一个 main activity 且每一个activity都需要在manifest中注册才能被使用, 对应到 AndroidManifest.xml
<activity
android:name=".MyActivity"
android:label="@string/app_name">
<!-- 通过intent-filter 过滤出用本activity想要处理的intent -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。