Android四大组件之一(Activity知识点总结)
2017-10-25 12:06
393 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pingping_010/article/details/78339776
Activity启动另一个Activity通过Intent传递数据很常见,但当后台运行的Activity回到前台并传递一些数据怎么办? 看下面例子:
MainActivity-->ThirdActivity--->MainActivity执行结果:onNewIntent()-----nullonNewIntent()-----Summer onRestart
MainActivity-->Home--->MainActivity(后台进程尚未被杀死时)执行结果为:onNewIntent()-----nullonNewIntent()-----nullonRestart
当MainActivity初次启动时不会调用onNewIntent(),执行方法顺序为:onCreate---onStart---onResume......,;当后面执行完ThirdActivity后再次执行MainActivity时,执行顺序为onNewIntent---onRestart-----onStart----onResume
如果由于系统内存不足把MainActivity释放掉后,那么再次调用MainActivity会执行onCreate----onStart----onResume.....
阅读更多
1.Activity生命周期
onCreate--->onStart-->onResume-->onPause-->onStop-->onReStart-->onDestroy
2.横竖屏切换生命周期(横竖屏切换涉及到Activity的android:configChanges属性)
1>当设置android:configChanges属性为android:configChanges="orientation"或者android:configChanges="orientation|keyboardHidden"或者不设置该属性时,第一次启动Activity,会执行以下方法:onCreate----onStart---onResume
当竖屏切换为横屏时,会执行:
onPause--->onSaveInstanceState(Activity的状态保存)--->onStop--->nDestroy--->onCreate--->
onStart--->onRestoreInstanceState(恢复之前由onSaveInstanceState保存的Activity信息)--->onResume
当横屏切换为竖屏时,会执行:
onPause--->onSaveInstanceState--->onStop--->onDestroy--->onCreate--->onStart--->
onRestoreInstanceState--->onResume
2>当设置android:configChanges属性值为android:configChanges="orientation|screenSize"或者
android:configChanges="orientation|keyboardHidden|screenSize",第一次启动Activity时会执行以下方法:
onCreate---onStart---onResume
当由竖屏切换为横屏时会执行:onConfigurationChanged()方法,不会重新调用各个生命周期方法
当由横屏切换为竖屏时会执行:onConfigurationChanged()方法,不会重新调用各个生命周期方法
</n>
3>当然也可以限制屏幕横竖屏切换,这样就不会出现切屏过程中生命周期重新加载的情况了:
android:screenOrientation="portrait" 始终以竖屏显示
android:screenOrientation="landscape" 始终以横屏显示
4>若不想让整个应用都可以横竖屏切换,只想限制某个Activity的横竖屏切换功能的话,可以在配置文件中对该Activity设置属性限制,也可以以代码的形式(如下):
//以竖屏显示 Activity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //以横屏显示 Activity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
3.Activity的启动模式
启动模式有四种:standard、
singleTop、singleTask、singleInstanceC
standard:标准模式。系统的默认模式,一种多实例模式。每次启动一个Activity都会重新创建一个新的实例。被启动的Activity会被放入启动者的栈中,如果启动者是除Activity之外的Context(如Application),这时没有任务栈,就会报错,此时需指定FLAG_ACTIVITY_NEW_TASK标记位,创建一个新栈。没有特殊需求默认是这种模式
singleTop:栈顶复用模式。如果一个Activity的实例已经在栈顶存在,启动这个Activity时,不会创建新的Activity,而会回调onNewIntent()【在此方法中可通过setIntent(intent)刷新intent数据】,如果不是在栈顶存在,则会创建一个实例。
singleTask:栈内复用模式。只要Activity的实例在一个栈中存在,再次启动Activity都不会重新创建实例,只会调用onNewIntent(),并从栈中移除实例上面的所有实例。
singleInstance:单实例模式。具有singleTask的所有特性,设置该模式的Activity只能独寸在一个任务栈中。
注意:当调用到onNewIntent(intent)的时候,需要在onNewIntent() 中使用setIntent(intent)赋值给Activity的Intent.否则,后续的getIntent()都是得到老的Intent。
Activity启动另一个Activity通过Intent传递数据很常见,但当后台运行的Activity回到前台并传递一些数据怎么办? 看下面例子:
<activity android:name=".MainActivity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ThirdActivity"/>
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String getIntentData=getIntent().getStringExtra("aaa"); Toast.makeText(this,"onCreate-----"+getIntentData,Toast.LENGTH_LONG).show(); } //点击事件 public void onClick(View view){ Intent intent=new Intent(MainActivity.this,SecondActivity.class); startActivity(intent); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent);//该方法不写的话 下面取到的数据为null String getIntentData=getIntent().getStringExtra("aaa"); Toast.makeText(this,"onNewIntent()-----"+getIntentData,Toast.LENGTH_LONG).show(); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_third); Toast.makeText(this,"onCreate---T",Toast.LENGTH_LONG).show(); } //点击事件 public void onClick(View view){ Intent intent=new Intent(ThirdActivity.this,MainActivity.class); intent.putExtra("aaa","Summer"); startActivity(intent); }
MainActivity-->ThirdActivity--->MainActivity执行结果:onNewIntent()-----nullonNewIntent()-----Summer onRestart
MainActivity-->Home--->MainActivity(后台进程尚未被杀死时)执行结果为:onNewIntent()-----nullonNewIntent()-----nullonRestart
当MainActivity初次启动时不会调用onNewIntent(),执行方法顺序为:onCreate---onStart---onResume......,;当后面执行完ThirdActivity后再次执行MainActivity时,执行顺序为onNewIntent---onRestart-----onStart----onResume
如果由于系统内存不足把MainActivity释放掉后,那么再次调用MainActivity会执行onCreate----onStart----onResume.....
阅读更多
相关文章推荐
- android四大组件之activity知识点最强总结
- android四大组件之service知识点最强总结
- Android开发总结笔记 四大组件之Activity(上) 1-2-1
- Android 基础知识总结---四大组件之一Activity(一)
- Android 四大组件之Activity 基础总结(1)
- Android四大组件知识点梳理一:Activity那点事
- Android开发总结笔记 四大组件之Activity(下) 1-2-3
- Android个人每天总结.doc(day06 多线程&Handler类&四大组件之:Activity)
- Android四大组件之一:Activity总结(上)
- Android四大组件之一-----Activity总结
- Android四大组件之一:Activity总结(下)
- Android四大组件之Activity总结
- android四大组件(总结)activity、service、content provider、broadcast receiver
- 4.Android基础:四大组件之----->Activity
- Android技术成长之路(四大组件之Activity)
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
- Android四大组件之---activity生命周期详解
- 深入剖析Android四大组件(九)——Activity之AppCompatActivity与toolbar的结合
- 深入剖析Android四大组件(一)——Activity生命周期详解
- Android四大组件之一:Activity详解