Acticity加载布局
setContentView(R.layout.first_layout)
AndroidManifest注册Activity
<acticity > </activity>
intent
显式intent
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startAvtivity(Intent);
隐式intent
- 在AndroidManifest中注册action和category
<action />
<category />
Intent intent = new Intent("");
intent.addCategory("");
startActivity(intent);
intent通过setData来进行intent传递
<data /> Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(uri.parse(""));
向下一个活动传递数据
intent.putExtra(TAG, data);
getIntent().getStringExtra(TAG);
返回数据给上一个活动
startActivityforresult(intent, request_code);
Intent intent = new Intent();
intent.putExtra(TAG, data);
setResult(result_code, intent);
onActivityResult(int requestCode, int resultCode, Intent data)
活动的生命周期
名词
活动(Activity),任务(Task),返回栈(Back Stack)
活动状态
- 运行状态
活动位于返回栈栈顶 - 暂停状态
活动不处于栈顶,但是可见,比如某个活动之上覆盖了对话框的活动 - 停止状态
活动不处于栈顶,且不可见 - 销毁状态
活动从返回栈中移除
活动的生存期
onCreate() 活动创建时调用
onStart() 活动由不可见变为可见时调用
onResume() 活动准备好和用户进行交互时调用,此时活动一定处于返回栈的栈顶,且处于运行状态
onPause() 启动或恢复另一个活动时调用
onStop() 活动完全不可见时调用
onDestroy() 活动在销毁之前被调用,调用之后,活动处于销毁状态
onRestart() 由停止状态变为运行状态时调用
- 完整生存期:onCreate() - onDestroy()
- 可见生存期:onstart() - onStop()
- 前台生存期:onResume() - onPause()
活动被回收时保存数据
利用onSaveInstanceState()和bundle来进行数据保存
outState.putString(TAG, Value)
saveInstanceState.getString(TAG)
活动的启动模式
在AndroidManifest中修改Activity的启动模式
Android:launchmode = "singletop..."
- standard
每当启动一个新的活动的时候,都会创建该活动的一个新的实例,并处于栈顶的位置 - singleTop
当启动一个新的活动时,如果栈顶是该活动,则可以直接使用,不会再创建新的实例,但如果该活动不再栈顶的时候,会再创建一个新的实例 - singleTask
每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例 - singleInstance
启动该模式的活动会启用一个新的返回栈来管理这个活动,这个模式主要是为了解决不同的应用共享活动实例的问题。
问题
- Activity A-B-C, C结束之后,C结束之后,返回到A,但是要带有B返回的结果,利用setResult来传递数据应该怎么做?
- 系统回收了处于某个状态的活动时,会调用那些生命周期函数?即这些活动最终会处于什么状态?
1,活动被回收之前,肯定会调用onSaveInstanceState()方法来进行状态的保存
2,活动被回收之后,按返回键返回该活动会调用onCreate方法重新创建该活动 活动什么时候会被销毁
singleTask指定不同的taskAffinity也会启动一个新的返回栈,新的taskAffinity指的是什么?
- singleInstance模式的数据传递是怎么进行的?