在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方法使用一个布尔值作为标志。您可以根据自己的需求选择合适的方法。