做项目的时候,涉及到一个注销登录的过程,这时候需要关闭之前打开的所有Activity。仅finish当前Activity显然是不够的,需要把返回栈中的Activity一个个销毁。我实践过的方法有两种:
创新互联企业建站,10年网站建设经验,专注于网站建设技术,精于网页设计,有多年建站和网站代运营经验,设计师为客户打造网络企业风格,提供周到的建站售前咨询和贴心的售后服务。对于成都做网站、成都网站设计中不同领域进行深入了解和探索,创新互联在网站建设中充分了解客户行业的需求,以灵动的思维在网页中充分展现,通过对客户行业精准市场调研,为客户提供的解决方案。1、基础类BaseActivity中注册广播接收器,接受关闭所有Activity的广播
2、基础类BaseActivity中将Activity加入一个集合中,并提供一个静态finishAll的方法统一关闭
备注:App中所有Activity直接或间接继承自BaseActivity。
一、使用广播接收器发送统一销毁广播
ExitAppReceiver 广播接收器代码:
public class ExitAppReceiver extendsBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals("exit_app")){ if (context != null){ if (context instanceofActivity){ ((Activity)context).finish(); } if (context instanceofService){ ((Service)context).stopSelf(); } } } } }
BaseActivity中注册销毁广播接收器:
public class BaseActivity extendsAppCompatActivity { private static final String TAG = "BaseActivity"; private ExitAppReceiver exitAppReceiver; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); registerExitAppReceiver();//注册 } @Override protected void onDestroy() { super.onDestroy(); unRegisterExitAppReceiver();//销毁 } private void registerExitAppReceiver(){ IntentFilter filter = new IntentFilter(); filter.addAction("exit_app"); exitAppReceiver = new ExitAppReceiver(); registerReceiver(exitAppReceiver, filter); } private void unRegisterExitAppReceiver(){ unregisterReceiver(exitAppReceiver); } }
发送关闭所有Activity广播:
Intent intent = new Intent("exit_app");
sendBroadcast(intent);
二、采用ActivityCollector(方法参考郭霖《第一行代码》第2版)
ActivityCollector源码
public class ActivityCollector { public static Listlist = new ArrayList<>(); public static void addActivity(Activity activity){ list.add(activity); } public static void removeActivity(Activity activity){ list.remove(activity); } public static void finishAllActivity(){ for (Activity activity :list) { if (!activity.isFinishing()){ activity.finish(); } } } }
在BaseActivity中添加和移除:
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityCollector.addActivity(this); } @Override protected void onDestroy() { super.onDestroy(); ActivityCollector.removeActivity(this); }
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。