请教Activity任务栈的问题

主界面按两次返回桌面,MainActivity会多生成一个任务栈,MainActivity使用singleTop或singleTask启动模式无效,想要实现的就是在MainActivity按两次物理返回按键,退回到手机桌面,下面是MainActivity类,和继承的BaseActivity,还有BaseApplication类
MainActivity:

public class MainActivity extends BaseActivity implements View.OnClickListener {


    @Override
    protected View initView(Bundle savedInstanceState) {
        View view = View.inflate(this, R.layout.activity_main, null);
        ButterKnife.bind(this, view);
        frameLayout.addView(view);
        mToolbar.setVisibility(View.GONE);
        String uid = UserManager.getInstance().getUid();
        Log.d(TAG, "initView: 1026=  " + uid);
        return view;
    }

    @Override
    protected void initData() {
       
    }

    @Override
    protected void initEvent() {
        mShoot.setOnClickListener(this);
    }

    private void setLayout() {
     
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN && KeyEvent.KEYCODE_BACK == keyCode) {
            long currentTime = System.currentTimeMillis();
            if ((currentTime - touchTime) >= waitTime) {
                ToastUtil.showMessage(getString(R.string.back_desk));//让Toast的显示时间和等待时间相同
                touchTime = currentTime;
            } else {
                //TODO:需要两次才退出
                BaseApplication.getApplication().exit();//退出应用,销毁所有Activity
                finish();
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

}

BaseActivity:

public abstract class BaseActivity extends AppCompatActivity {

   
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        beforeOnCreate(savedInstanceState);
        super.onCreate(savedInstanceState);
        hideStatusBar(false);    //隐藏顶部电量,时间等信息
        BaseApplication.getApplication().addActivity(this);//记录当前应用的Activity,用于退出整个应用
        getSupportActionBar().hide();//隐藏顶部ActionBar,继承AppCompatActivity需要使用getSupportActionBar,getActionBar方法在继承Activity使用
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
        }
     
    }
  
}

BaseApplication:

public class BaseApplication extends MultiDexApplication {

    @Override
    public void onCreate() {
        super.onCreate();
        sApp=this;
//        UserManager.init(this);
        application=this;
        ToastUtil.init(this);
        TXUGCBase.getInstance().setLicence(this, ugcLicenceUrl, ugcKey);
        UserManager.init(this);
//        Logger.addLogAdapter(new AndroidLogAdapter());

    }

    public static Context getContext() {
        return sApp.getApplicationContext();
    }

    public static BaseApplication getApplication() {
        return application;
    }

    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();
    }

}
阅读 1.8k
1 个回答

试试这个,看是否能退出

MainActivity里去掉onKeyDown,然后在BaseActivity里加onBackPressed().

@Override
public void onBackPressed() {
 super.onBackPressed();
    finish();
}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题