Android快速退出APP的几种方式

方式一

将主活动设置为SingleTask模式,可以确保每次启动主活动时,都是同一个实例,提高了内存利用率。在退出的活动中,可以通过Intent将返回主活动,并且重写主活动的onNewIntent方法,在其中加入一句finish()结束。

  1. 在AndroidManifest.xml文件中将主活动设置为SingleTask模式:
<activity android:name=".MainActivity"
          android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
  1. 在退出的活动中,通过Intent返回到主活动:
public class ExitActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_exit);

        Button btnExit = findViewById(R.id.btn_exit);
        btnExit.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                Intent intent = new Intent(ExitActivity.this, MainActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
            }
        });
    }
}
  1. 在MainActivity中重写onNewIntent方法,在其中加入一句finish():
public class MainActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MyApplication.getInstance().addActivity(this);
    }

    @Override
    protected void onNewIntent(Intent intent) {
    
    
        super.onNewIntent(intent);
        finish();
    }
}

这样,每次返回到主活动时,都会关闭上一个实例,确保内存利用率。

方式二

通过广播来完成退出功能,接受广播后退出
可以通过发送一个自定义的广播来实现退出应用程序的功能。具体实现步骤如下:

  1. 在MyApplication中添加发送广播的方法:
public void sendExitBroadcast() {
    
    
    Intent intent = new Intent("com.example.exit");
    sendBroadcast(intent);
}
  1. 在需要退出应用程序的地方调用MyApplication.getInstance().sendExitBroadcast()方法,发送广播:
public class ExitActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_exit);

        Button btnExit = findViewById(R.id.btn_exit);
        btnExit.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                MyApplication.getInstance().sendExitBroadcast();
            }
        });
    }
}
  1. 在MyApplication中注册广播接收器,接收广播后退出应用程序:
public class MyApplication extends Application {
    
    

    private static MyApplication instance;
    private Stack<Activity> activityStack;
    private BroadcastReceiver exitReceiver;

    private MyApplication() {
    
    
        activityStack = new Stack<>();
    }

    public static synchronized MyApplication getInstance() {
    
    
        if (instance == null) {
    
    
            instance = new MyApplication();
        }
        return instance;
    }

    public void addActivity(Activity activity) {
    
    
        activityStack.push(activity);
    }

    public void exit() {
    
    
        while (!activityStack.isEmpty()) {
    
    
            Activity activity = activityStack.pop();
            activity.finish();
        }
        System.exit(0);
    }

    public void sendExitBroadcast() {
    
    
        Intent intent = new Intent("com.example.exit");
        sendBroadcast(intent);
    }

    @Override
    public void onCreate() {
    
    
        super.onCreate();

        exitReceiver = new BroadcastReceiver() {
    
    
            @Override
            public void onReceive(Context context, Intent intent) {
    
    
                exit();
            }
        };
        registerReceiver(exitReceiver, new IntentFilter("com.example.exit"));
    }

    @Override
    public void onTerminate() {
    
    
        super.onTerminate();
        unregisterReceiver(exitReceiver);
    }
}

这样,当发送广播时,MyApplication中的广播接收器就会接收到广播并退出应用程序。

方式三

定义一个栈,写一个自定义的MyApplication,利用单例模式去单独对Activty进行管理,在每个Activity的onCreate()方法中调用MyApplication.getInstance().addActivity(this)将当前的Activity添加到栈中统一管理,如果需要退出应用程序时再调用MyApplication.getInstance().exit()方法直接就完全退出了应用程序。
需要退出时只要把进栈的活动一个个循环退出就可以。
以下是实现代码:

public class MyApplication extends Application {
    
    

    private static MyApplication instance;
    private Stack<Activity> activityStack;

    private MyApplication() {
    
    
        activityStack = new Stack<>();
    }

    public static synchronized MyApplication getInstance() {
    
    
        if (instance == null) {
    
    
            instance = new MyApplication();
        }
        return instance;
    }

    public void addActivity(Activity activity) {
    
    
        activityStack.push(activity);
    }

    public void exit() {
    
    
        while (!activityStack.isEmpty()) {
    
    
            Activity activity = activityStack.pop();
            activity.finish();
        }
        System.exit(0);
    }
}

在每个Activity的onCreate()方法中调用MyApplication.getInstance().addActivity(this):

public class MainActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MyApplication.getInstance().addActivity(this);
    }
}

需要退出应用程序时再调用MyApplication.getInstance().exit()方法:

public class ExitActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_exit);

        Button btnExit = findViewById(R.id.btn_exit);
        btnExit.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                MyApplication.getInstance().exit();
            }
        });
    }
}

猜你喜欢

转载自blog.csdn.net/ChenYiRan123456/article/details/130943129
今日推荐