代码之家  ›  专栏  ›  技术社区  ›  Samuel

“的含义”android:process“定义服务或接收器时

  •  0
  • Samuel  · 技术社区  · 6 年前

    我正在深入了解这个属性 android:process 当定义在 service receiver AndroidManifest.xml

    这是来自 docs :

    android:process

    如果分配给此属性的名称以冒号(“:”)开头,则会在需要时创建一个新的应用程序专用进程,并且服务将在该进程中运行。如果进程名称以小写字符开头,则服务将在该名称的全局进程中运行,前提是该进程具有这样做的权限。这允许不同应用程序中的组件共享一个进程,从而减少资源使用。

    在下面介绍如何编写同步服务和接收器的各种示例时,这些示例通常包含带有单独 android:process

    下面是一个示例,其中定义了接收器和服务( :同步 )

    <receiver android:name="myapp.backgroundAnalysis.BackgroundAlaramReceiver"
            android:process=":remote"
            >
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
    
    <service
        android:name="myapp.backgroundCloudSync.SyncService"
        android:exported="false"
        android:process=":sync">
        <intent-filter>
            <action android:name="android.content.SyncAdapter"/>
        </intent-filter>
        ...
    </service>
    

    android:process 两者都有?我知道它们将在默认进程中运行,其他所有进程(Main、Threads?等)也在默认进程中运行,但这是否会对接收方和SyncService的行为产生影响?

    (此问题的背景与一个问题有关,即我需要对来自不同实体(主应用程序、接收器和SyncAdapter)的某些共享资源运行同步操作,但共享资源无法在多进程环境中工作,因此我尝试了解可能的解决方法或解决方案的含义)

    1 回复  |  直到 4 年前
        1
  •  1
  •   CommonsWare    6 年前

    这是否会对接收器和同步服务的行为产生影响?

    不是直接的。

    这会影响应用程序在运行时的行为吗

    线程安全在一个进程中的每一件事情都会变得更加重要。OTOH,这比协调2+个进程中的工作要容易得多,这样一个进程就不会踩到另一个进程的工作。

    我知道服务将在主线程上运行

    服务的生命周期方法(例如。, onStartCommand()

    当代码被安排在主线程上运行时,是否会暂停或延迟?

    如果您的服务在主应用程序线程上运行代码,那么当代码运行时,它将阻塞该线程上的所有其他内容。这就是为什么服务总是使用后台线程。

    LiveData ,RxJava等)。