我用我的应用程序AIDL服务。 我也想运行其他程序,所以我用android:process=":remote"
的服务宣言中的清单。
我的问题是,当:remote
过程开始它显然重新创建Application
对象。
我真的不与我重写应用程序对象,并调用大量的客户端的东西在onCreate()
方法。 然而,我想服务代码驻留在与客户端相同的apk。
我能做到这一点? 是Application
新进程启动时总是对象重建?
感谢您的帮助。 谢谢!
我用我的应用程序AIDL服务。 我也想运行其他程序,所以我用android:process=":remote"
的服务宣言中的清单。
我的问题是,当:remote
过程开始它显然重新创建Application
对象。
我真的不与我重写应用程序对象,并调用大量的客户端的东西在onCreate()
方法。 然而,我想服务代码驻留在与客户端相同的apk。
我能做到这一点? 是Application
新进程启动时总是对象重建?
感谢您的帮助。 谢谢!
我也想运行其他程序
为什么? 这是否增加什么价值给用户,以抵消额外的RAM,CPU和电池的成本? 极少数应用程序需要不止一个过程。
我的问题是,当“:远程”进程开始它显然重新创建应用程序对象
当然。 每个进程都有自己的。
我真的不与我重写应用程序对象,并调用大量的客户端的东西在“的onCreate()”方法
然后干掉android:process=":remote"
。 你的用户会感谢你。
然而,我想服务代码驻留在与客户端相同的apk。
什么样的服务?
新进程启动时,应用程序对象始终重现?
是。
正如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;
}