zoukankan      html  css  js  c++  java
  • 从0系统学Android--2.6 Activity 的最佳实践

    从0系统学Android--2.6 Activity 的最佳实践


    本系列文章目录更多精品文章分类

    本系列持续更新中....

    实践中的技巧

    2.6.1 知晓当前是在哪个 Activity

    这个其实很简单,就是新建一个 BaseActivity ,然后让这个类继承 AppCompatActivity,并重写 onCreate() 方法:

    public class BaseActivity extends AppCompatActivity{
      
      @Override
      protected void onCreate(Bundle saveInstanceState){
        super.onCreate(saveInstanceState);
        Log.e("BaseActivity",getClass().getSimpleName());
      }
    }
    

    这样再让我们的每个 Activity 都继承自这个 BaseActivity ,这样每次打开一个页面就会打印这个页面的类名了。

    2.6.2 随时随地退出程序

    如果启动了好几个 Activity,那么如何退出程序呢?还有点多次返回键吗?

    解决思路:专门写一个管理所有 Activity 的类。

    public class ActivityCollector{
      public static List<Activity> activities = new ArrayList<>();
      
      public static void addActivity(Activity activity){
        activities.add(activity);
      }
      
      public static void removeActivity(Activity activity){
        activities.remove(activity);
      }
      
      public static void finishAll(){
        for(Activity activity:activities){
          if(!activity.isFinishing()){
            activity.finish();
          }
          
        }
        activities.clear();
      }
    }
    

    然后修改 BaseActivity 代码

    @override
    protected void onCreate(Bundle saveInstanceState){
      super.onCreate(saveInstanceState);
      Log.e("BaseActivity",getClass().getSimpleName());
      ActivityCollector.addActivity(this);
    }
    
    @Override
    protected void onDestroy(){
      super.onDestroy();
      ActivityCollector.removeActivity(this);
    }
    

    当然我们也可以在销毁所有 Activity 代码后面再加上杀掉当前进程的代码,保持程序完全退出,杀掉进程代码:

    android.os.Process.killProcess(android.os.Process.myPid());
    

    这个方法只能杀掉当前的进程,无法杀掉其他程序。

    启动 Activity 的最佳写法

    比如要启动 Acitivity A,就在 A 中添加方法

    public static void actionStart(Context context,String data1,String data1){
      Intent intent = new Intent(context,ActivityA.class);
      intent.putExtra("param1",data1);
      intent.putExtra("param2",data2);
      context.startActivity(intent);
    }
    

    下一节开始学习 UI 布局内容!

  • 相关阅读:
    mybatis中的#和$的区别
    error: 40
    SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛* B. 我觉得海星
    AtCoder Regular Contest 093 D
    AtCoder Regular Contest 092 D
    2018 蓝桥杯省赛 B 组模拟赛(五) 结果填空:藏宝图
    2018/3/22 美团在线笔试 编程题
    2018/3/22美团在线笔试
    2018 蓝桥杯省赛 B 组模拟赛(一)青出于蓝胜于蓝
    心情小记
  • 原文地址:https://www.cnblogs.com/sydmobile/p/11859281.html
Copyright © 2011-2022 走看看