您的位置:首页 > 移动开发 > Android开发

Android退出整个应用的方法

2017-05-11 15:30 323 查看
一般应用在登录界面的时候,如果点击手机上的返回键,就退出整个应用,有些可能会友好提示一下"再按一次退出程序".我在写项目的时候发现,常规的一些方法居然不管用,比如我处在登录界面的时候,通过调用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();
}
}
这样就可以退出整个应用了.以上实例如有不足请指出.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: