1、activity的自身功能声明:常见的MAIN及LAUNCHER表示该activity拥有被桌面app启动的功能。
<intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter>
2、启动其它activity:
显式启动:同一个app中,指定类名。
例如:Intent intent =newIntent(this,SignInActivity.class); startActivity(intent);
隐式启动:可跨app,指定action或者category、data等。
Intent intent =newIntent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_EMAIL, recipientArray); startActivity(intent);
3、启动其它activity获取结果: startActivityForResult()
例如:获取选中通讯录Intent intent =new Intent(Intent.ACTION_PICK,Contacts.CONTENT_URI); startActivityForResult(intent, PICK_CONTACT_REQUEST);
处理activity返回结果:requestCode用于区分启动的activity,resultCode需要了解启动的activity的定义规范。
@Override protected void onActivityResult(int requestCode,int resultCode,Intent data){ if(resultCode ==Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST){
4、生命周期:在paused、stopped状态时进程可被kill,应在onPause()、onResume()保存、恢复重要数据,kill之后从onCreate()开始,onStop()之后先onRestart()再onStart(),其它正常对应create--destroy, start--stop, resume--pause。
resumed:可见,有用户焦点--running
paused:可见,无焦点
stopped:不可见
onSaveInstanceState()应只保存ui临时状态,在layout中给每个widget赋予唯一id。
5、A启动B:A->onPause(), B->onCreate(), B->onStart(), B->onResume(), 如果A不可见则A->onStop();