- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试限制一系列应用程序,使用相同的 Activity (在所有人共享的图书馆项目中),以便一次只有一个这样的应用程序可以运行。
在我尝试学习如何去做的第一轮尝试中,我了解到:
setVisible(true/false)
在onResume()/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() 吗?不让第二个 Activity 甚至没有开始?如果是这样,我在哪里做这个?
最佳答案
我有点困惑。您说的是一系列应用程序,但这些应用程序是如何打包的?在 Android 上,一个 APK 包含一个应用程序。该应用程序具有唯一的程序包名称和唯一的用户 ID,并在其自己的进程中运行。这意味着如果您在 2 个单独的包中有 2 个应用程序,它们将在 2 个单独的进程中运行,因此从 getApplication() 返回静态实例对您没有任何好处。
这里有一个可能对您有用的想法:
使用此共享库的每个应用程序都可以广播一个粘性 Intent,其中包含作为 Extra 运行的应用程序的包名称。
每个使用共享库的应用程序都可以为这个粘性 Intent 注册一个监听器,如果它获得一个它可以查看该应用程序(Extra 中的那个)当前是否正在运行。如果该应用程序正在运行,它可以拒绝运行(或警告用户并询问他是否应该运行,或其他)。
这只是一个想法,我还没有实际尝试过,但我认为这可以做你想做的事。
关于android - 从覆盖的 getApplication() 返回共享静态是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11739536/
我有一个关于 wicket getApplication 的问题。 getApplication() 和 getSession().getApplication 有什么区别? 部署 wicket 应用
我在我的应用程序中创建了一个 Android 全局变量,当我尝试在我的 Activity 中使用 getApplication 访问它时,我收到错误: Cannot resolve method ge
我正在使用 getHotelName() 和 setHotelName() 在应用程序中存储数据,然后访问它。在我分类为 Launcher 的主要 Activity 中,方法和 getApplicat
我花了一段时间阅读这篇文章,但还没有找到答案。 我在一个应用程序中进行了一些 Activity 。我想在它们之间共享一些不适合 Intent 或序列化数据文件的数据。我知道我可以为此目的使用整个应用程
我想在我的网络应用程序启动时“测试加载”一些复合控件 (xhtml)。但是,当我尝试获取应用程序上下文 (getApplication()) 时,我遇到了这个问题: IllegalStateExcep
我正在尝试按照 Java 中的示例进行操作,但遇到了一些问题。 我已经创建了我自己的应用程序子类,我现在正试图在我的 baseactivity 中获取对所有其他事件将从其继承的引用。 要在 java
我正在尝试限制一系列应用程序,使用相同的 Activity (在所有人共享的图书馆项目中),以便一次只有一个这样的应用程序可以运行。 在我尝试学习如何去做的第一轮尝试中,我了解到: android:l
我找不到令人满意的答案,所以我们开始吧:Activity/Service.getApplication() 和 Context.getApplicationContext() 是怎么回事? 在我们的应
我想在 Recyclerview 的 onClickListener 方法中膨胀 Recyclerview。 为此,我知道我必须从相应的 Activity 中获取上下文才能设置 LinearLayou
我确定我昨晚没有做任何奇怪或错误的事情。昨晚,我仍然能够 Toast.makeText(getApplicationContext(), "Some String", Toast.LENGTH_SHO
大家下午好!我正在 Android Studio 中开发一个搜索系统,但我是 Java 语言的初学者,我的错误可能很愚蠢。我想帮助理解两件事。第一:为什么我不能访问 this.getApplicati
我有类 App,其中包含我的 Application 的上下文。但是当我编译时,我在这一行的其他类中得到了一个错误: App app = (App) getApplication(); 类应用: i
我使用应用程序访问我的数据。当按钮被点击时,我想使用应用程序中的数据。我使用以下代码: b.setOnClickListener(new OnClickListener() { @Override p
我试图让 Dagger 简单示例在 IntelliJ 中运行,但它在 DemoBaseActivity 类中的 getApplication 调用失败: public abstract class D
我在一个 Activity 中运行以下行,它在同一个应用程序中,但在不同的包中: AppObject appObj = (AppObject)this.getApplication(); // FYI
(这里已经很晚了,所以可以监督一些非常简单的事情..) 我有以下类(class): public class GlobalState extends Application { private
有什么区别: getApplicationContext() getBasecontext() getApplication() getParent() 你能用一个简单的例子详细说明吗? 最佳答案 g
本文整理了Java中com.zsmartsystems.zigbee.ZigBeeEndpoint.getApplication()方法的一些代码示例,展示了ZigBeeEndpoint.getApp
我有一个带有自定义应用程序类的 Android 应用程序: 一般工作。在主要 Activity 的onCreate ,我检索应用程序对象: public App App() { return
一切正常,直到两天前我收到此错误: > Task :app:compileDebugJavaWithJavac FAILED Deprecated Gradle features were used
我是一名优秀的程序员,十分优秀!