zoukankan      html  css  js  c++  java
  • Android中的Activity的小技巧

    最近重新拾起郭大神的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      }

       比较基础,打好底才能建高楼。

    冰冻三尺非一日之寒。 会当凌绝顶,一览众山小。
  • 相关阅读:
    Trie树-0/1字典树-DFS-1624. 最大距离
    图-连通分量-DFS-749. 隔离病毒
    贪心-谷歌-857. 雇佣 K 名工人的最低成本
    图-搜索-DFS-51. N皇后
    图-连通分量-DFS-并查集-695. 岛屿的最大面积
    图-最小生成树-629. 最小生成树
    codeforces 493 D Vasya and Chess【 博弈 】
    POJ 2155 Matrix【 二维树状数组 】
    HDU 5273 Dylans loves sequence【 树状数组 】
    POJ 1195 Mobile phones【 二维树状数组 】
  • 原文地址:https://www.cnblogs.com/8988-miaoxiaohua/p/7706605.html
Copyright © 2011-2022 走看看