- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
有关 Android 进程的三个问题。我正在开发一个应用程序。如果我在 AndroidManifest.xml 中声明一个服务在另一个进程中运行
<service android:name=".MyService" android:process=":MyProcess"/>
这是否意味着会有两个 JVM 实例,一个供 MyService 使用,另一个供其他代码使用?
如果上述问题的答案是肯定的,那么是否也意味着如果我有一个单例类同时被 Activity 和 MyService 使用,那么将为该单例创建两个实例?
<那么如何保证两个进程只创建并共享一个实例呢?最好提供一个样本:)
====更新====
感谢您的所有评论和回答,不幸的是,我的项目需要使用单独的服务进程,因为它有长时间运行的后台任务。根据您的回复,我有第四个问题:
如果我需要在 MyService
进程和其他代码进程之间传递一个 non-parcelable 对象。可能吗?如何?
最佳答案
- Does it mean there will be two JVM instances , one used by MyService while the other one used by other code?
是的(在某种程度上,但不完全是,它是一个 dalvik VM,或者在 Lollipop ART 中),但是是的,您有两个独立的东西来运行服务和其余代码。
- If the answer of above question is YES, then does it also mean if I have a singleton class used by both Activity & MyService, then there will be two instances created for the singleton?
是的
- How to ensure only one instance be created & shared by two processes then? Better provide a sample :)
你不能!您只是告诉系统有单独的进程。所以它不能有“相同”的单例。
一种方法是让您的服务实现绑定(bind)器或 AIDL(以防您直接调用方法)或实现 ContentProvider,这在您可以从中读取值的进程中是相同的。
或者您可以让一切变得更简单,而不使用该过程。不建议使用 99.9% 的用例 android:process
。所以重新评估你的软件。你真的需要它吗?
编辑:
unfortunately, my project need to use separate service process as it has long running background tasks
如果您的项目需要长时间运行的后台任务,您肯定需要一个服务
。但这并不意味着它需要在一个单独的过程中。您项目中的所有 Activity 都可以进入后台并被垃圾收集,您的服务仍然可以正常运行。它将继续在与 Activity 运行相同的进程上运行,但服务和单例仍然存在。请记住从中返回 START_STICKY
。
如果你仍然认为你需要在一个单独的进程中使用它(我认为你不需要)。然后你需要实现一个绑定(bind)服务(或者可能是 AIDL,我不确定绑定(bind)服务是否可以跨进程工作),将 Activity 连接到它并使用像 public void takeThisObJect(对象引用);
绑定(bind)和 AIDL 服务指南的链接:
http://developer.android.com/guide/components/bound-services.html http://developer.android.com/guide/components/aidl.html
关于android - Android 中的进程和单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28693024/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!