(Android第一行代码实验一)活动的最佳实践

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(Android第一行代码实验一)活动的最佳实践相关的知识,希望对你有一定的参考价值。

活动的最佳实践

   1.知晓当前是在哪一个活动

        这个技巧将教会你,如何根据程序当前的界面就能判断出这是哪一个活动。

  •  首先需要新建一个 BaseActivity 继承自 Activity,然后在 BaseActivity中重写 onCreate()方法。

        public class BaseActivity extends Activity {   

            @Override 

            protected void onCreate(Bundle savedInstanceState) {

         //在 onCreate()方法中获取了当前实例的类名,并通过 Log打印了出来。

           super.onCreate(savedInstanceState);  

           Log.d("BaseActivity", getClass().getSimpleName()); 

         }  

       }

  •  接下来我们需要让 BaseActivity 成为 ActivityTest 项目中所有活动的父类修改 FirstActivity、SecondActivity和 ThirdActivity的继承结构,让它们不再继承自 Activity,而是 继承自 BaseActivity。现在重新运行程序,然后通过点击按钮分别进入到 FirstActivity、SecondActivity 和 ThirdActivity的界面,这时该活动的类名就会被打印出来,     这样我们就可以 时时刻刻知晓当前界面对应的是哪一个活动了.

 


 

    2.随时随地退出程序

            你会发现当前想退出程序是非常不方便 的,需要连按三次 Back 键才行,该方法可以解决这个问题。

       解决思路:

             只需要用一个专门的集合类对所有的活动进行管理就可以了,

  •       新建一个 ActivityCollector类作为活动管理器

       public class ActivityCollector {  

             //,我们通过一个 List来暂存活动,

               public static List<Activity> activities = new ArrayList<Activity>();

             //然后提供了一个 addActivity()方法用 于向 List 中添加一个活动
 
               public static void addActivity(Activity activity) { 

                          activities.add(activity); 

                 }
            //提供了一个 removeActivity()方法用于从 List 中移除活动。
                public static void removeActivity(Activity activity) { 

                        activities.remove(activity); 

                } 
           //最后 提供了一个 finishAll()方法用于将 List中存储的活动全部都销毁掉。
               public static void finishAll() {

                  for (Activity activity : activities) {  

                  if (!activity.isFinishing()) {   

                  activity.finish();   

                      }

             } 

         }
}

  •   修改 BaseActivity中的代码

     public class BaseActivity extends Activity {
 
               @Override

              protected void onCreate(Bundle savedInstanceState) {  

                      super.onCreate(savedInstanceState);  

                      Log.d("BaseActivity", getClass().getSimpleName());

             //调用了 ActivityCollector 的 addActivity()方法,表明 将当前正在创建的活动添加到活动管理器里

                     ActivityCollector.addActivity(this); 

                }   

                       @Override 

           //重写 onDestroy()方法, 并调用了 ActivityCollector 的 removeActivity()方法,表明将一个马上要销毁的活动从活动管 理器里移除。

            protected void onDestroy() { 

            super.onDestroy(); 

             ActivityCollector.removeActivity(this); 

             }  

    }

  •       从此以后,不管你想在什么地方退出程序,只需要调用 ActivityCollector.finishAll()方法 就可以了.

         Button button3 = (Button) findViewById(R.id.button_3);

         button3.setOnClickListener(new OnClickListener() { 

               @Override

             public void onClick(View v) {  

        //调用 ActivityCollector.finishAll()方法

                 ActivityCollector.finishAll();  

                }

          }); 


 

   3.启动活动的最佳写法

  •     启动 SecondActivity传递字符串参数最佳写法。

            public class SecondActivity extends BaseActivity { 

      /*所有 SecondActivity中需要的数据都是通过 actionStart()方法的参数传递过来的,然 后把它们存储到 Intent中,最后调用 startActivity()方法启动                 SecondActivity。*/

                 public static void actionStart(Context context, String data1, String data2) { 

                          Intent intent = new Intent(context, SecondActivity.class); 

                          intent.putExtra("param1", data1);

                          intent.putExtra("param2", data2); 

                           context.startActivity(intent); 

                      }  ……

             }

     这样写是一目了然,SecondActivity 所需要的数据全 部都在方法参数中体现出来了.

  •    现在只需要一行代码就可以启动 SecondActivity

              button1.setOnClickListener(new OnClickListener() {

                        @Override

                  public void onClick(View v) { 

                    //传入参数

                       SecondActivity.actionStart(FirstActivity.this, "data1", "data2"); 

               }

        });

                                  2016-11-25  21:56:18










以上是关于(Android第一行代码实验一)活动的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

在android中使用底部导航的最佳实践:活动与片段

(Android第一行代码)活动的启动模式

Android第一行代码学习笔记七---活动的生命周期

异步编程最佳实践

Android第一行代码学习笔记六---Intent向活动传递数据

Android第一行学习代码笔记四---使用Intent在活动之间穿梭