使用机器人:过程=“:远程”再现机器人应用程序对象(using android:process=“:

2019-07-22 07:59发布

我用我的应用程序AIDL服务。 我也想运行其他程序,所以我用android:process=":remote"的服务宣言中的清单。

我的问题是,当:remote过程开始它显然重新创建Application对象。

我真的不与我重写应用程序对象,并调用大量的客户端的东西在onCreate()方法。 然而,我想服务代码驻留在与客户端相同的apk。

我能做到这一点? 是Application新进程启动时总是对象重建?

感谢您的帮助。 谢谢!

Answer 1:

我也想运行其他程序

为什么? 这是否增加什么价值给用户,以抵消额外的RAM,CPU和电池的成本? 极少数应用程序需要不止一个过程。

我的问题是,当“:远程”进程开始它显然重新创建应用程序对象

当然。 每个进程都有自己的。

我真的不与我重写应用程序对象,并调用大量的客户端的东西在“的onCreate()”方法

然后干掉android:process=":remote" 。 你的用户会感谢你。

然而,我想服务代码驻留在与客户端相同的apk。

什么样的服务?

新进程启动时,应用程序对象始终重现?

是。



Answer 2:

正如CommonsWare已经提到的,每一个流程都有自己的Application对象。

在您的Application.onCreate()方法可以检查该方法是否被从主过程中或称为远程进程中,并相应地初始化不同的东西。

@Override
public void onCreate()
{
    super.onCreate();

    if(isRemoteProcess(this))
    {
        // initialize remote process stuff here
    }
    else
    {
        // initialize main process stuff here
    }
}

private boolean isRemoteProcess(Context context)
{
    Context applicationContext = context.getApplicationContext();
    long myPid = (long) Process.myPid();
    List<RunningAppProcessInfo> runningAppProcesses = ((ActivityManager) applicationContext.getSystemService("activity")).getRunningAppProcesses();
    if (runningAppProcesses != null && runningAppProcesses.size() != 0)
    {
        for (RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses)
        {
            if (((long) runningAppProcessInfo.pid) == myPid && "YOUR_PACKAGE_NAME:remote".equals(runningAppProcessInfo.processName))
            {
                return true;
            }
        }
    }
    return false;
}


文章来源: using android:process=“:remote” recreates android Application object