• 《第一行代码》阅读笔记(五)——活动的最佳实践


    这一部分,我觉得讲的还是非常好的,在实际开发中用处很大。

    知晓当前是在哪一个活动

    第一步:创建一个所有Activity的基类BaseActivity

    class BaseActivity extends AppCompatActivity {
    
        private static final String TAG = "BaseActivity";
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d(TAG, getClass().getSimpleName());
        }
    }
    

    并不给这个类创建活动,只是一个普通的Java类。然后让其继承AppCompatActivity,并重写onCreate方法,在方法中啥都不干,只是通过日志打印出当前的类名。

    第二步:让所有的活动继承BaseActivity

    public class MainActivity extends BaseActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    }
    

    因为每个活动都会重写onCreate方法,并且调用父类的onCreate方法,然后就会打印出自己的活动类名。

    但是还有一个更加实用的方法,就是在手机上面下载一个App,名字叫“当前Activity”,可以直接在App运行的时候查看当前Activity的类名。

    左上角就是包名+类名

    随时随地退出程序

    因为back就是调用finish函数,只能关闭栈顶的Activity,如果想要直接退出程序怎么办?

    第一步:新建一个ActivityCollector类

    public class ActivityCollecter {
    
        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();
            }
        }
    }
    

    在活动管理器中,我们通过一个List 来暂存活动,然后提供了一个addActivity()方法用于向List中添加一个活动,提供了一个removeActivity()方法用于从List中移除活动,最后提供了一个finishAll()方法用于将List中存储的活动全部销毁掉。

    第二步:修改BaseActivity

    public class BaseActivity extends AppCompatActivity {
    
        private static final String TAG = "BaseActivity";
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d(TAG, getClass().getSimpleName());
            ActivityCollecter.addActivity(this);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            ActivityCollecter.removeActivity(this);
        }
    }
    

    在BaseActivity的onCreate()方法中调用了ActivityCollector的addActivity()方法,表明将当前正在创建的活动添加到活动管理器里。然后在BaseActivity中重写onDestroy()方法,并调用了ActivityCollector 的removeActivity()方法,表明将一个马上要销毁的活动从活动管理器里移除。

    以后如果需要直接退出程序,直接调用finishAll函数即可

    启动活动的最佳写法

    这个非常常用,一定要学会

    第一步:编写actionStart函数

    public class A {
    public static void actionStart(Context context, String para1 , String para2) {
            Intent intent = new Intent(context, A.class);
            intent.putExtra("name1", para1);
            intent.putExtra("name2", para2);
            context.startActivity(intent);
        }
    ...
    }
    

    第二步:跳转
    A.actionStart(B.this,"para1","para2");

    一般actionStart函数都写在那个Activity中,就是跳转到那个Activity。就如上面的例子A活动中写这个方法,这样编写符合人们的惯性思维,也有规范可言。在这类中可以直接通过getExtra()方法来接收打开这个活动传进来的数据,也就是例子中的para1和para2。

    当需要跳转到A的时候,直接调用A.actionStart即可,然后依次传入当前环境,和需要的参数。即可

  • 相关阅读:
    LeetCode算法题-Trim a Binary Search Tree(Java实现)
    LeetCode算法题-Non-decreasing Array(Java实现)
    LeetCode算法题-Image Smoother(Java实现)
    Node.js 官方文档中文版
    jade 网上看到一个不错的demo 分享 一下 链接
    jade 的 考古
    标题党 数据抓取与管理
    最近面试 有人问 sqlite 用过么 sqlite 不是 嵌入式的 开发 么 难道最近还 web开发 了?
    嗯 想写个demo 苦于没数据
    客户端 jQuery 跨端口 调用 node 服务端
  • 原文地址:https://www.cnblogs.com/zllk/p/13363656.html
Copyright © 2020-2023  润新知