gpt4 book ai didi

android - Android 中的进程和单例

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:36:51 25 4
gpt4 key购买 nike

有关 Android 进程的三个问题。我正在开发一个应用程序。如果我在 AndroidManifest.xml 中声明一个服务在另一个进程中运行

<service android:name=".MyService" android:process=":MyProcess"/>
  1. 这是否意味着会有两个 JVM 实例,一个供 MyService 使用,另一个供其他代码使用?

  2. 如果上述问题的答案是肯定的,那么是否也意味着如果我有一个单例类同时被 Activity 和 MyService 使用,那么将为该单例创建两个实例?

    <
  3. 那么如何保证两个进程只创建并共享一个实例呢?最好提供一个样本:)

====更新====

感谢您的所有评论和回答,不幸的是,我的项目需要使用单独的服务进程,因为它有长时间运行的后台任务。根据您的回复,我有第四个问题:

如果我需要在 MyService 进程和其他代码进程之间传递一个 non-parcelable 对象。可能吗?如何?

最佳答案

  1. 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 中),但是是的,您有两个独立的东西来运行服务和其余代码。

  1. 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?

是的

  1. 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com