一、Activity之间通信——Intent、Bundle意图传递
Intent intent = new Intent(A.this,B.class);
intent.putExtra(kay,value);
startActivity(intent);
Intent intent = new Intent(A.this,B.class);
Bundle bundle = new Bundle();
bundle.putString(key,value);
input.putExtras(bundle);
startActivity(intent);
1、回传数据 startActivityForResult(intent,requestCode)
两个页面之间传递,如 A页面 输入 2+3 ,B页面计算结果,并返回
private void toActivity_B(){
Intent intent = new Intent(Activity_A.this,Activity_B.class);
intent.putExtra("a","2");
intent.putExtra("b","3");
startActivityForResult(intent,10086);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==10086 && resultCode == RESULT_OK) {
int sum = data.getIntExtra("sum", 0);
}
}
B页面
private void sum() {
Intent intent =getIntent();
int a =intent.getIntExtra("a",2);
int b =intent.getIntExtra("b",3);
Intent sum = new Intent();
sum.putExtra("sum",(a+b));
setResult(RESULT_OK,sum);
}
2、两个Activity 之间跳转时必然会执行的是哪几个方法
Acitivity_A启动
05-09 22:15:40.777 839-839/? E/Activity_A: ------------->onCreate()
05-09 22:15:40.777 839-839/? E/Activity_A: ------------->onStart()
05-09 22:15:40.777 839-839/? E/Activity_A: ------------->onResume()
跳转到Activity_B
05-09 22:21:09.787 3883-3883/com.apacherio.jondy.workdemo E/Activity_A: ------------->onPause()
05-09 22:21:09.807 3883-3883/com.apacherio.jondy.workdemo E/Activity_B: ------------->onCreate()
05-09 22:21:09.807 3883-3883/com.apacherio.jondy.workdemo E/Activity_B: ------------->onStart()
05-09 22:21:09.807 3883-3883/com.apacherio.jondy.workdemo E/Activity_B: ------------->onResume()
05-09 22:21:10.217 3883-3883/com.apacherio.jondy.workdemo E/Activity_A: ------------->onStop()
返回Acitivity_A
05-09 22:22:15.877 3883-3883/com.apacherio.jondy.workdemo E/Activity_B: ------------->onPause()
05-09 22:22:15.887 3883-3883/com.apacherio.jondy.workdemo E/Activity_A: ------------->onRestart()
05-09 22:22:15.887 3883-3883/com.apacherio.jondy.workdemo E/Activity_A: ------------->onStart()
05-09 22:22:15.887 3883-3883/com.apacherio.jondy.workdemo E/Activity_A: ------------->onResume()
05-09 22:22:16.177 3883-3883/com.apacherio.jondy.workdemo E/Activity_B: ------------->onStop()
05-09 22:22:16.177 3883-3883/com.apacherio.jondy.workdemo E/Activity_B: ------------->onDestroy()
那么问题来了,是不是跳转到Activity_B时,Acitivity_A都会调onStop()呢?
(1)、透明背景Activity_B
android:theme="@android:style/Theme.Translucent"
或者
android:theme="@android:style/Theme.Translucent.NoTitleBar"
05-09 22:29:50.587 7669-7669/com.apacherio.jondy.workdemo E/Activity_A: ------------->onPause()
05-09 22:29:50.607 7669-7669/com.apacherio.jondy.workdemo E/Activity_B: ------------->onCreate()
05-09 22:29:50.607 7669-7669/com.apacherio.jondy.workdemo E/Activity_B: ------------->onStart()
05-09 22:29:50.617 7669-7669/com.apacherio.jondy.workdemo E/Activity_B: ------------->onResume()
(2)、对话框Dialog形式Activity_B
android:theme="@android:style/Theme.Dialog"
05-09 22:33:20.297 9139-9139/com.apacherio.jondy.workdemo E/Activity_A: ------------->onPause()
05-09 22:33:20.317 9139-9139/com.apacherio.jondy.workdemo E/Activity_B: ------------->onCreate()
05-09 22:33:20.327 9139-9139/com.apacherio.jondy.workdemo E/Activity_B: ------------->onStart()
05-09 22:33:20.327 9139-9139/com.apacherio.jondy.workdemo E/Activity_B: ------------->onResume()
上述结果的原因是:只有在不可见时,才会调用onStop(),借个图说明下
参考链接
https://blog.csdn.net/hanhan1016/article/details/47977489
三、在对话框Dialog形式Activity_B时,按Home键后,生命周期是什么样的呢?
05-09 22:52:10.597 9139-9139/com.apacherio.jondy.workdemo E/Activity_B: ------------->onPause()
05-09 22:52:10.597 9139-9139/com.apacherio.jondy.workdemo E/Activity_A: ------------->onStop()
05-09 22:52:10.617 9139-9139/com.apacherio.jondy.workdemo E/Activity_B: ------------->onStop()
全部都不可以见!!!