方式一
将主活动设置为SingleTask模式,可以确保每次启动主活动时,都是同一个实例,提高了内存利用率。在退出的活动中,可以通过Intent将返回主活动,并且重写主活动的onNewIntent方法,在其中加入一句finish()结束。
- 在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>
- 在退出的活动中,通过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);
}
});
}
}
- 在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();
}
}
这样,每次返回到主活动时,都会关闭上一个实例,确保内存利用率。
方式二
通过广播来完成退出功能,接受广播后退出
可以通过发送一个自定义的广播来实现退出应用程序的功能。具体实现步骤如下:
- 在MyApplication中添加发送广播的方法:
public void sendExitBroadcast() {
Intent intent = new Intent("com.example.exit");
sendBroadcast(intent);
}
- 在需要退出应用程序的地方调用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();
}
});
}
}
- 在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):文章来源:https://www.toymoban.com/news/detail-536158.html
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()方法:文章来源地址https://www.toymoban.com/news/detail-536158.html
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();
}
});
}
}
到了这里,关于Android快速退出APP的几种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!