在Android中,Single Instance(单实例)模式确保应用程序只有一个运行实例。为了实现这一目标,您可以使用以下方法:
- 使用文件锁(File Locking):
在应用程序启动时,尝试获取一个独占的锁。如果成功获取到锁,说明没有其他实例正在运行;否则,说明有其他实例正在运行,您可以选择关闭当前实例或者显示一个提示对话框告知用户。
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:
将一个标志存储在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方法使用一个布尔值作为标志。您可以根据自己的需求选择合适的方法。