在Android中,Single Instance(單實例)模式確保應用程序只有一個運行實例。為了實現這一目標,您可以使用以下方法:
在應用程序啟動時,嘗試獲取一個獨占的鎖。如果成功獲取到鎖,說明沒有其他實例正在運行;否則,說明有其他實例正在運行,您可以選擇關閉當前實例或者顯示一個提示對話框告知用戶。
private boolean isInstanceRunning() {
File file = new File(getApplicationContext().getFilesDir(), "instance_lock");
try {
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fos = new FileOutputStream(file);
return fos.getChannel().tryLock() != null;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (isInstanceRunning()) {
finish(); // 關閉當前實例
} else {
// 創建鎖
try {
FileOutputStream fos = new FileOutputStream(new File(getApplicationContext().getFilesDir(), "instance_lock"));
fos.getChannel().lock();
} catch (IOException e) {
e.printStackTrace();
}
}
}
將一個標志存儲在SharedPreferences中,用于表示應用程序是否已經在運行。在應用程序啟動時檢查該標志,如果已經設置,則關閉當前實例;否則,清除該標志并繼續運行。
private boolean isInstanceRunning() {
SharedPreferences sharedPreferences = getSharedPreferences("app_instance", MODE_PRIVATE);
boolean isRunning = sharedPreferences.getBoolean("isRunning", false);
if (isRunning) {
return true;
} else {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("isRunning", true);
editor.apply();
return false;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
SharedPreferences sharedPreferences = getSharedPreferences("app_instance", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("isRunning", false);
editor.apply();
}
這兩種方法都可以確保您的Android應用程序以單實例模式運行。文件鎖方法在文件系統中創建一個鎖文件,而SharedPreferences方法使用一個布爾值作為標志。您可以根據自己的需求選擇合適的方法。