• (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的界面,这时该活动的类名就会被打印出来,     这样我们就可以 时时刻刻知晓当前界面对应的是哪一个活动了,观察logcat中的打印信息就可以时时刻刻知晓当前界面对应的是哪一个活动了。

    •   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"); 
              
                             }
              
                      });
  • 相关阅读:
    Pythonday01
    PYTHON_DAY2
    PYTHON_DAY3
    数据字典生成SQL语句
    Spring cloud Netflix >readMe
    SecureCRT的安装与激活
    MyBatis映射文件UserMapper.xml(mysql环境)
    数据库模糊查询4种用法
    MyBatis配置文件myBatisconfig.xml
    计算机基础:2进制和2进制算法。
  • 原文地址:https://www.cnblogs.com/loufangcheng/p/9971396.html
Copyright © 2020-2023  润新知