- activity之intent
- activity的跳转通过intent,分显式意图和隐式意图
- 显式意图:直接传入要跳转的activity,和上下文,通过startActivity(intent)
- 隐式意图:要指明action和category,然后在清单文件中activity·标签中配置<intent-filter>,一般要两者都匹配上,才能启动该activity,<intent-filter>如果配置的category·是默认的,则不需要指明category
- 每个intent只能指明一个action,可以有多个category
- 隐式intent不但能启动自己程序里的活动,还能启动其他程序里的活动,如启动系统的浏览器
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http:www.baidu.com"));
startActivity(intent);
- setData(Uri uri):指明操作的数据,<intent-filter>中也要配置<data>,才能用隐式意图启动
- 调用系统拨号界面
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
- intent携带数据:putExtra(key,value),获取数据:如string类型的,getIntent().getStringExtra()
- intent返回数据:startActivityForResult(int requestCode,Intent intent),在被开启的activity中返回数据时,调用setResult(“RESULT_OK”,intent)返回数据,重写onActivityResult()取得数据
- 重写返回键:onBackPressed()
- 活动的四种状态:处于栈顶,不处于栈顶但仍然可见,不可见,销毁状态
- 活动的生命周期:
- onCreate():加载布局,绑定布局
- onStart():不可见到可见
- onResume():可见,并获取焦点
- onPause():失去焦点
- onStop():不可见
- onDestroy():被销毁
- onRestart():由不可见到可见
- 活动被系统回收:当activityA启动到ActivityB,ActivityA不可见,有可能被系统回收,这时,按返回键,activityA还是能看到,但是已经被重新创建了,而不是走的onRestart(),如何解决呢?通过重写onSaveInstanceState()保存数据
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
String tempData = "hello";
outState.putString("save_data",tempData);
}
如何在activity重新创建的时候取出数据呢?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState!=null){
String data = savedInstanceState.getString("save_data");
}
}
- 获取当前任务栈的id:getTaskId()
- 杀死当前应用: android.os.Process.killProcess(android.os.Process.myPid());
能不能来一点有趣的知识
1.activity的跳转动画
通过overridePendingTransition()方法
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.screen_zoom_in, R.anim.screen_zoom_out);
finish();