我试图限制一系列应用程序,使用相同的活动(在所有人共享的库项目中),以便一次只能运行一个这样的应用程序。
在我尝试学习如何去做的第一轮尝试中,我了解到:
- android:launchMode="singleTask" 不会成功。
setVisible(true/false)
onResume()/onPause() 分别是判断我的应用程序是否正在运行的最佳方法。但是一旦第二个实例知道第一个实例正在运行,我该怎么办???
因此,我正在考虑通过覆盖Activity.getApplication()并返回共享静态来始终返回相同的实例来欺骗系统:
public class MyApplication extends Application
{
private static MyApplication s_instance;
public MyApplication()
{
s_instance = this;
}
public static MyApplication getApplication()
{
return s_instance;
}
}
(这个想法归功于@inazaruk)
但是,就像前面提到的可见性解决方案一样,我现在该怎么办?
系统本身是否使用getApplication()来确定是启动一个新实例还是将其带到堆栈的前面?这安全吗?
如果答案是“否”,我可以调用Activity.finish()来不让第二个活动甚至不开始吗?如果是这样,我在哪里可以做到这一点?
- 就在Activity.onCreate()中?
- 活动.onResume()?
- 我的应用程序()?(构造函数)
- 更好的地方?