- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在开发一个带有自定义 Application 类的应用程序,它初始化了几个单例,以便它们在所有应用程序工作时间内都存在。我的应用程序中还有一些服务可与这些单例一起使用。应用程序类是否会在服务之前被带有单例实例的 android 破坏,这样服务将无法使用它们?还是应用程序始终存在,即使它的上下文服务也是如此?找到摆脱这种情况的最佳方法是什么?
谢谢。
最佳答案
应用程序对象是任何 Android 应用程序的主要绝对起点。它总是存在于任何 Manifest 声明的项目之前,例如 Activity、Service 和 BroadcastReceiver。所以放轻松,单例会在你身边。
这是一个很大的讨论话题,你可以谷歌更多关于它所以下面是我个人的看法。无论你的单例的原因是什么(一个数据库,一个位图缓存,一个 FileUtils)我认为在你的应用程序的第一个入口点初始化它们是正确的,这是应用程序。但是应用程序本身并不是用来携带或容纳这些对象的对象,因此我建议的设计方法是:
=> 在你的单例对象/类上你必须:
private static MySingletonClass instance; // reference to the single object
private MySingletonClass(Context c){ // private constructor to avoid construction from anywhere else
// let's say it needs the context for construction because it's a database singleton
}
public static MySingletonClass get(){ //
if(instance == null) throw new RuntimeException("This singleton must be initialised before anything else");
return instance;
}
public static void init(Context c){ // call the initialisation from the Application
instance = new MySingletonClass(c);
}
=> 然后在您的 Application 对象上您只需初始化单例
onCreate(){
MySingletonClass.init(getApplicationContext());
}
通过这种方式,您将保留必要的初始化,强制执行单例模式,但访问您调用的对象是该对象类而不是应用程序。我知道这只是组织上的差异,但我相信这就是好代码和坏代码的区别。
例如,在您的服务中,调用是:MySingletonClass.get()
并且永远不应是 MyApplication.mySingle
。
希望对您有所帮助。
关于android - 服务运行时的应用程序类生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16145435/
我正在开发一个使用多个 turtle 的滚动游戏。玩家 turtle 根据按键命令在 Y 轴上移动。当危害和好处在 X 轴上移动时,然后循环并改变 Y 轴位置。我尝试定义一个名为 colliding(
我不明白为什么他们不接受这个作为解决方案,他们说这是一个错误的答案:- #include int main(void) { int val=0; printf("Input:- \n
我正在使用基于表单的身份验证。 我有一个注销链接,如下所示: 以及对应的注销方法: public String logout() { FacesContext.getCurren
在 IIS7 应用程序池中有一个设置 Idle-time out 默认是 20 分钟,其中说: Amount of time(in minutes) a worker process will rem
我是一名优秀的程序员,十分优秀!