一般应用在登录界面的时候,如果点击手机上的返回键,就退出整个应用,有些可能会友好提示一下"再按一次退出程序".我在写项目的时候发现,常规的一些方法居然不管用,比如我处在登录界面的时候,通过调用onBackPressed()方法或onKeyDown()方法去监听返回按键的点击,然后再finish()或System.exit(0).现在就让我们来解决一下这种问题,思路大致是这样:自定义单例Application类继承Application,通过集合记录每个Activity,自定义退出方法,遍历集合,销毁所有Activity,最后在登录界面通过监听onBackPressed返回按键调用退出方法,退出整个应用.
先自定义一个Application类,别忘了在清单文件注册
public class BaseApplication extends Application{
private List<Activity> mList = new LinkedList<>();//记录当前应用的Activity,用于退出整个应用销毁所有Activity
public HashMap<String,Object> map=new HashMap<>();
private static BaseApplication application;
public static BaseApplication getApplication(){return application;}
public HashMap<String,Object> getMap(){
return map;
}
@Override
public void onCreate() {
super.onCreate();
application=this;
}
public void addActivity(Activity activity) {
mList.add(activity);
}
public void exit() {
try {
for (Activity activity : mList) {
if (activity != null)
activity.finish();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.exit(0);
}
}
public void onLowMemory() {
super.onLowMemory();
System.gc();
}
}
在你的BaseActivity类的onCreate下面调用addActivity()方法,BaseActivity是自定义类,相信大多数项目都会有,这里不再赘述该类.(如果没有继承BaseActivity,只是继承了Activity的在该类的super.onCreate(saveInstanceState)下面一行加上BaseApplication.getApplication().addActivity(this);)
public abstract class BaseActivity extends Activity {
protected FrameLayout mContainer;
protected TextView mBackHome;
protected TextView mLanguage;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BaseApplication.getApplication().addActivity(this);//记录当前应用的Activity,用于退出整个应用
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
setContentView(R.layout.activity_base);
frameLayout = findViewById(R.id.content_container);
mTvTitle=findViewById(R.id.tv_title);
mTvMore=findViewById(R.id.tv_more);
mIvBack=findViewById(R.id.iv_back);
mMainTitle=findViewById(R.id.rv_main_title);
mIvTitle=findViewById(R.id.iv_title);
mIvMore=findViewById(R.id.iv_more);
initView();
initData();
initEvent();
}
protected abstract View initView();
protected abstract void initData();
protected abstract void initEvent();
} 最后是调用的地方:在登录界面重写onBackPressed()方法,方法内调用exit()
public class LoginActivity extends BaseActivity {
@Override
protected View initView() {
View view = View.inflate(this, R.layout.activity_login, null);
ButterKnife.bind(this, view);
mBackHome.setVisibility(View.GONE);
mContainer.addView(view);
return view;
}
@Override
protected void initData() {
}
@Override
protected void initEvent() {
}
/** 退出整个应用程序 */
@Override
public void onBackPressed() {
BaseApplication.getApplication().exit();
}
} 这样就可以退出整个应用了.以上实例如有不足请指出.
|