我试图限制一个应用程序家族,使用相同的活动(在所有共享库项目中),这样只有一个这样的应用程序可以在一次运行。从overriden getApplication()返回一个共享静态是否安全?
在我的第一轮努力学习如何去说,我才知道:
- 机器人:launchMode =“singleTask”不会做的伎俩。
setVisible(true/false)
inResume()/ onPause()分别是best way来判断我的应用程序是否正在运行。但是,一旦第二个实例知道第一个实例正在运行,我该怎么办?
所以,我想通过始终通过重写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()不要让第二个活动不能启动?如果是这样,我在哪里做?
- Right in Activity.onCreate()?
- Activity.onResume()?
- MyApplication()? (构造函数)
- 更好的地方吗?
我有点困惑。你说_a系列的应用程序_但是它们是如何打包的?在Android上,APK包含单个应用程序。该应用程序具有唯一的软件包名称和唯一的用户标识,并在其自己的进程中运行。这意味着如果你在2个独立的包中有2个应用程序,它们将在2个独立的进程中运行,因此从'getApplication()'返回静态实例不会对你有任何好处。请详细说明并解释这些应用程序如何相互关联。 – 2012-08-01 16:47:49
@DavidWasser你是绝对正确的。它们在两个独立的进程中运行,因此从getApplication()返回静态实例对我没有任何好处。对于应用程序包名称不同,您也是对的,但这与此处不相关,因为共享库项目的包名称是相同的。任何想法如何在**实时**(即不是通过缓慢的共享偏好,而是通过更快的RAM)在不同的过程中追踪它?如果您发表评论作为答案,我会接受它。 – ateiob 2012-08-01 20:55:44