方式一
將主活動(dòng)設(shè)置為SingleTask模式,可以確保每次啟動(dòng)主活動(dòng)時(shí),都是同一個(gè)實(shí)例,提高了內(nèi)存利用率。在退出的活動(dòng)中,可以通過Intent將返回主活動(dòng),并且重寫主活動(dòng)的onNewIntent方法,在其中加入一句finish()結(jié)束。
- 在AndroidManifest.xml文件中將主活動(dòng)設(shè)置為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>
- 在退出的活動(dòng)中,通過Intent返回到主活動(dòng):
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();
}
}
這樣,每次返回到主活動(dòng)時(shí),都會(huì)關(guān)閉上一個(gè)實(shí)例,確保內(nèi)存利用率。
方式二
通過廣播來完成退出功能,接受廣播后退出
可以通過發(fā)送一個(gè)自定義的廣播來實(shí)現(xiàn)退出應(yīng)用程序的功能。具體實(shí)現(xiàn)步驟如下:
- 在MyApplication中添加發(fā)送廣播的方法:
public void sendExitBroadcast() {
Intent intent = new Intent("com.example.exit");
sendBroadcast(intent);
}
- 在需要退出應(yīng)用程序的地方調(diào)用MyApplication.getInstance().sendExitBroadcast()方法,發(fā)送廣播:
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中注冊(cè)廣播接收器,接收廣播后退出應(yīng)用程序:
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);
}
}
這樣,當(dāng)發(fā)送廣播時(shí),MyApplication中的廣播接收器就會(huì)接收到廣播并退出應(yīng)用程序。
方式三
定義一個(gè)棧,寫一個(gè)自定義的MyApplication,利用單例模式去單獨(dú)對(duì)Activty進(jìn)行管理,在每個(gè)Activity的onCreate()方法中調(diào)用MyApplication.getInstance().addActivity(this)將當(dāng)前的Activity添加到棧中統(tǒng)一管理,如果需要退出應(yīng)用程序時(shí)再調(diào)用MyApplication.getInstance().exit()方法直接就完全退出了應(yīng)用程序。
需要退出時(shí)只要把進(jìn)棧的活動(dòng)一個(gè)個(gè)循環(huán)退出就可以。
以下是實(shí)現(xiàn)代碼:
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);
}
}
在每個(gè)Activity的onCreate()方法中調(diào)用MyApplication.getInstance().addActivity(this):文章來源:http://www.zghlxwxcb.cn/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);
}
}
需要退出應(yīng)用程序時(shí)再調(diào)用MyApplication.getInstance().exit()方法:文章來源地址http://www.zghlxwxcb.cn/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();
}
});
}
}
到了這里,關(guān)于Android快速退出APP的幾種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!