活动的最佳实践

   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"); 
            
                           }
            
                    });

(Android第一行代码实验一)活动的最佳实践的更多相关文章

  1. 《Android第一行代码》笔记

    学习Android开发差点儿相同有两年时间了.期间也做了大大小小的一些项目.近来抽出闲暇想把Android基础强化一下,之前在网上看到了郭霖郭大神的几篇博客.从中受益不少.于是花了近一周时间看完了郭神 ...

  2. Android 第一行代码(第二版)分享

    今天从网上好不容易看到了别人转发的pdf版的 第一行代码通过下载我把它存在了百度云里面了与大家共享 http://pan.baidu.com/s/1bRztF4

  3. android第一行代码-3.activity之间的调用跟数据传递

    前面两节所有应用都是同一个activity中的,是时候讲activity之间交互的操作了,此后会涉及到intent这个概念,这也算一个新的里程碑开始. 主要内容包括intent的使用,以及activi ...

  4. 1.3.4分析你的第一个Android程序——Android第一行代码(第二版)笔记

    切换项目结构模式 Project模式的项目结构 我们将项目切换成Project模式,这就是真实的目录结构. .gradle和.idea 这两个目下放置的都是Android Studio自动生成的一些文 ...

  5. android第一行代码-6.自定义控件的实现

    0.假设一个应用中标题栏控件都是共用的,如果每个activity都需要设置button,绑定方法,那代码就会很臃肿.那我们可以自定义控件,然后继承这个控件就行了. 自定义控件为TitleLayout, ...

  6. android第一行代码-2.activity基本用法

    摘要: 本节主要涉及到的有activity的创建,标题栏隐藏,button绑定方法(toast的使用),menu使用,活动销毁 1.activity的创建跟注册 创建: public class Te ...

  7. Android 第一行代码

    ::-/stuapplication.pla.edu.cn.fragmentbestpractice W/dalvikvm﹕ VFY: unable to find class referenced ...

  8. alexkn android第一行代码-8.sqlite使用

    Android自带sqlite数据库,因此常见操作应该都掌握.包括数据库的创建/升级以及增删改查. 1.创建数据库 public class MyDatabaseHelper extends SQLi ...

  9. android第一行代码-1.项目结构

    0.项目结构 一个简单的android项目结构大致如下 入口就是MainActivity这个类,如果对于一个陌生的项目,最好的办法是看AndroidMainifest.xml,如下 <?xml ...

随机推荐

  1. Win10系列:C#应用控件基础20

    SemanticZoom控件 SemanticZoom控件由相互关联的缩小视图和放大视图所组成,缩小视图用来显示内容的索引,放大视图可以用来显示内容的详细信息,用户可以根据阅读需要在两种视图之间自由切 ...

  2. Win10系列:C#应用控件基础13

    Image控件 开发Windows应用商店应用时,除了在界面中显示文字信息以外,还可以加入图片来配合说明及增加美观度.使用Image控件能够实现显示图片的功能,开发者可以根据需求使图片按照不同的方式显 ...

  3. scott用户不存在

    用的Oracle版本是12c,在解锁scott时提示用户不存在,于是搜解决方法,给出了两种方法: 一种是加载scott.sql文件(我的scott.sql文件是存在的,在Oracle安装目录下搜索一下 ...

  4. jmeter操作练习

    1.登录: 2.用户定义变量 3.http请求默认值 这是登录里面的服务器名称或IP可以不用填(以上情况是当多个共用一个IP的时候,可以这样做) 4.配置文件下--CSV Data Set Confi ...

  5. MFC VC++获取当前程序的运行路径

    ]; GetModuleFileName(, szDir, ); int i; i = lstrlen(szDir) - ; ) { if(szDir[i] == _T('\\')) { szDir[ ...

  6. C#磁性窗体设计

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  7. FCC JS基础算法题(12):Where do I belong(数组排序并找出元素索引)

    题目描述: 先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引.举例:where([1,2,3,4], 1.5) 应该返回 1.因为1.5插入到数组[1,2,3,4]后变成[1,1.5 ...

  8. java.io.IOException: Could not delete path 'D:\mycode\reactnative\SecondTest\android\app\build\generated\source\r \release\android\support\v7

    问题解决 直观上看是没有删除某个文件,产生的IOException异常,实际上是因为上次编译导致的缓存没有清空导致的. 进入到android目录下运行下面代码清除上次打包时的缓存: ./gradlew ...

  9. 如何用Python写一个每分每时每天的定时程序

    1.计算生日是星期几 当你女朋友要过生日了,你肯定要定找家饭店订个餐庆祝一下,餐馆工作日会空一些,周末位置不好定,要是能知道她的生日是星期几就好了,下面这个程序就能搞定~~ 比如girl friend ...

  10. 洛谷 P1763 状态压缩dp+容斥原理

    (题目来自洛谷oj) 一天,maze决定对自己的一块n*m的土地进行修建.他希望这块土地共n*m个格子的高度分别是1,2,3,...,n*m-1,n*m.maze又希望能将这一些格子中的某一些拿来建蓄 ...