Activity实践技巧

关于Activity的一些实践技巧

1、知道当前是在哪一个Activity

可以在所有Activity的父类(基类)的onCreate()中调用getClass().getSimpleName()方法获取当前实例的类名并打印出来,如下:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    Log.i("MainActivity2","oncreate"+getClass().getSimpleName());
        }
    });
}

这样,当我们进入一个Activity时,改Activity的类名就会打印出来,我们可以随时知道我们当前页面对应哪一个Activity。

2、随时随地退出程序

当你当前Activity所在任务栈中实例很多事,想退出程序是很不方便的事情,需要按很多次back键,按home键只是挂起,并没有退出。要解决这个问题,只需要一个专门的集合类对所有的Activity进行管理就可以了,例如:

新建一个ActivityCollector类作为Activity的管理类。

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

可以在所有Activity的父类(基类)的onCreate()中调用ActivityCollector. addActivity(this),在onDestroy()中调用ActivityCollector. removeActivity(this),如果要直接退出程序,可以调用ActivityCollector. finishAll(),还可以在销毁所有Activity后调用android.os.Process.killProcess(android.os.Process.myPid())

killProcess()的作用是杀掉一个进程,参数为一个进程id,我们通过myPid()来获取当前程序的进程id,需要注意的是,这个方法只能用于杀掉当前程序的进程,不能用这个方法杀死其他程序的进程。

启动活动的最佳写法

启动活动的方法大家都很熟悉,首先通过Intent构建意图,然后调用startActivity()或者startActivityForResult()方法将活动启动起来,如果有数据从一个活动到另一个活动,也可以借助Intent来完成。

假设Main2Activity中需要用到两个重要的参数,在启动Main2Activity的时候必须要传递过来,那么,我们很容易写成下面这个代码:

Intent intent = new Intent(this,Main2Activity.class);
intent.putExtra("param1","param1");
intent.putExtra("param2","param2");
startActivity(intent);

这样写本身没有什么问题,但是在实际开发中会给其他同事造成困扰,换一种写法,在MAin2Activity中增加一个actionStart()方法:

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

在要启动Main2Activity的地方调用这个方法:

Main2Activity.actionStart(this,"param1","param2");

这样写就一目了然了,启动Main2Activity所需要的参数。