最近重新拾起郭大神的Android书籍温故而知新。
1.获取Activity所在的task栈,可以一目了然哪些Activity在一个task栈中:
在onCreate中添加: Log.d("Android","Task is is" +getTaskId());
2.观察log中当前Activity的实例,从而更能对比出四种不同的启动模式的差别:
Log.d("XXActivity",this.toString());
3.利用onSaveInstanceState()保存数据:
1 @Override
2 protected void onSaveInstanceState(Bundle outState) {
3 super.onSaveInstanceState(outState);
4 String tempData = "Something you just typed";
5 outState.putString("key","tempData");
6
7 }
4. 恢复数据:这里保存数据和取出数据都是使用的Bundle,此外Intent和Bundle可以一起用于传递数据:
1 @Override 2 public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) { 3 super.onCreate(savedInstanceState, persistentState); 4 setContentView(R.layout.activity_main); 5 if(savedInstanceState != null){ 6 String tempData = savedInstanceState.getString("key"); 7 Log.d(TAG,tempData); 8 } 9 }
5. 知晓当前在哪个Activity界面:
一般的项目里都有类似BaseActivity的基类,我们只需在该类的onCreate方法中打印一个log就可以识别当前界面了
@Override public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) { super.onCreate(savedInstanceState, persistentState); Log.d("BaseActivity",getClass().getSimpleName()); }
6. 随时随地退出应用:
需要一个专门的集合类对所有的活动进行管理,下面的ActivityCollector类作为活动管理器:
1 public class ActivityCollector { 2 public static List<Activity> activities = new ArrayList<>(); 3 4 public static void addActivity(Activity activity) { 5 activities.add(activity); 6 } 7 8 public static void removeActivity(Activity activity) { 9 activities.remove(activity); 10 } 11 12 public static void finishAll() { 13 for(Activity activity :activities) { 14 if(!activity.isFinishing()) { 15 activity.finish(); 16 } 17 } 18 } 19 }
在活动管理器中,通过List来暂存活动,然后提供了一个addActivity()方法用于向list中添加活动,同时提供了一个removeActivity()方法用于移除活动从该list中,最后提供一个finishAll()的方法将List中的活动全部销毁。
调用:只需在onCreate中添加:ActivityCollector.addActivity(this);
在onDestory()中添加:ActivityCollector.removeActivity(this);
在需要销毁全部活动的地方调用:ActivityCollector.finishAll();
1 android.os.Process.killProcess(android.os.Process.myPid()); killProcess()只能用于杀掉当前程序的进程,不能杀掉其他程序。
7.启动活动的最佳写法:
1 public static void actionStart(Context context, String data1, String data2) { 2 Intent intent = new Intent(context,SecondActivity.class); 3 intent.putExtra("param1", data1); 4 intent.putExtra("param2",data2); 5 context.startActivity(intent); 6 }
比较基础,打好底才能建高楼。