Android退出整个应用的方法

一般应用在登录界面的时候,如果点击手机上的返回键,就退出整个应用,有些可能会友好提示一下"再按一次退出程序".我在写项目的时候发现,常规的一些方法居然不管用,比如我处在登录界面的时候,通过调用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();
    }
}
这样就可以退出整个应用了.以上实例如有不足请指出.




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值