【问题标题】:Can't close Android app after restart重启后无法关闭安卓应用
【发布时间】:2015-12-21 14:35:12
【问题描述】:

我已使用以下 HOME、DEFAULT 类别和 MAIN Action 声明了 MainActivity。我也确实选择了该应用程序作为默认启动器。当我单击返回时,它会按预期关闭 MainActivity。但是,如果我让 MainActivity 运行并重新启动设备,我将无法退出 MainActivity!按下我调用finish()的onBackPress(),按预期暂停活动。但后来我看到 onCreate 调用()、onResume()和 MainActivity 像小丑一样备份!我可以做什么?这仅在 Activity 保持运行时重新启动设备后才会发生。

我正在尽我所能摆脱这个活动,包括内部

 onBackPressed(){
    ActivityCompat.finishAffinity(MainActivity.this);
        finish();
 }

我看到了对 FLAG_ACTIVITY_CLEAR_TOP 的建议,但首先启动 Activity 的是它的操作系统,而不是我。

我根本无法离开应用程序!

【问题讨论】:

标签: android


【解决方案1】:

在您的 onBackPressed() 方法中添加此代码。

Intent intentExit = new Intent(Intent.ACTION_MAIN);
intentExit.addCategory(Intent.CATEGORY_HOME);
intentExit.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intentExit);
finish();

【讨论】:

    【解决方案2】:

    这只是一个想法,不知道能不能完美运行

    尝试创建广播接收器

    1. 获取手机重启事件
    2. 关闭应用

    在 Manifest.xml 中

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    
    
    <receiver android:name=".BootCompleteReceiver">  
                <intent-filter>     
                    <action android:name="android.intent.action.BOOT_COMPLETED"/>  
                    <category android:name="android.intent.category.DEFAULT" />  
                </intent-filter>  
    </receiver>
    

    BootCompleteReceiver.java

    import android.content.BroadcastReceiver;  
    import android.content.Context;  
    import android.content.Intent;    
    
    public class BootCompleteReceiver extends BroadcastReceiver {   
    
        @Override  
        public void onReceive(Context context, Intent intent) {  
               Intent i = new Intent(context, MainActivity.class);
               i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
               i.addFlags (Intent.FLAG_ACTIVITY_SINGLE_TOP);
               i.putExtra("close_activity",true);
               context.startActivity(i);
        }  
    }
    

    MainActivity.java添加这个块

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        if(intent.getBooleanExtra("close_activity",false)){
            this.finish();
        }
    }
    

    参考资料:

    1. Android BroadcastReceiver, auto run service after reboot of device
    2. Close application from broadcast receiver

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多