各个方案比较下优劣。
方案一
广播的方式
这个是最容易想到的,同时也是网上提供最多的。
由于多个Activity要使用,关闭页面的广播最好写在基类BaseActivity中,也可以在各个子页面单独写,但是代码量就增加了。
public class BaseActivity extends Activity {
//根据需求定义自己需要关闭页面的action
public static final String RECEIVER_ACTION_FINISH = "receiver_action_finish";
private FinishActivityRecevier mRecevier;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mRecevier = new FinishActivityRecevier();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(RECEIVER_ACTION_FINISH);
registerReceiver(mRecevier, intentFilter);
}
private class FinishActivityRecevier extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//根据需求添加自己需要关闭页面的action
if (RECEIVER_ACTION_FINISH.equals(intent.getAction())) {
BaseActivity.this.finish();
}
}
}
@Override
protected void onDestroy() {
if (mRecevier != null) {
unregisterReceiver(mRecevier);
}
super.onDestroy();
}
}
发送广播就需要在各个需求子Activity中进行了,这里使用工具类,方便以后多次或者拓展使用,只需要在需求子Activity中直接调用就行。
public class BroadcastUtils {
/**
* 发送finish页面的广播
* action可以自己根据需要添加
* @param context
*/
public static void sendFinishActivityBroadcast(Context context) {
Intent intent = new Intent(BaseActivity.RECEIVER_ACTION_FINISH);
context.sendBroadcast(intent);
}
}
优劣:
有点:最常规使用,不会出现内存泄漏,在基类中操作,代码量不多。
缺点:项目中若是需要关闭页面多的话,需要发送大量广播,会降低性能。
// 退出JVM,释放所占内存资源,0表示正常退出
System.exit(0);
// 从系统中kill掉应用程序
android.os.Process.killProcess(android.os.Process.myPid());