Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

为什么每次启动服务Application都会Oncrete,这样真的好吗 #10

Open
yk007 opened this issue Jul 9, 2019 · 6 comments
Open

Comments

@yk007
Copy link

yk007 commented Jul 9, 2019

No description provided.

@ShihooWang
Copy link
Owner

因为启动的Service(服务)运行在另外一个Process(进程)中,当进程初始化的时候,Application就会重走一遍onCreate。
你可以在Application的onCreate方法中增加以下判断,用来区别不同的Process:
String processName = getProcessName(this, android.os.Process.myPid());
private String getProcessName(Context cxt, int pid) {
ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
if (runningApps == null) {
return null;
}
for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
if (procInfo.pid == pid) {
return procInfo.processName;
}
}
return null;
}
得到的processName 为:com.shihoo.daemonlibrary、com.shihoo.daemonlibrary:work 等
这和我们在manifest中配置的子进程一样:

@yk007
Copy link
Author

yk007 commented Jul 24, 2019

由于业务需要必须使用内网,工作进程4秒到后台拉一次数据(代替推送),由于多进程使用,第一次后台请求总会登录失效,必须重新登录才能拿到数据,这样虽然可以,但是有2个session,一个主进程的一个子进程的,网络框架用单例和静态在多进程中好像都有问题(需要登录才能拿到数据),多进程访问静态变量也有问题,需要如何解决,求指教

@ShihooWang
Copy link
Owner

那就不要将工作的service配置process,使用默认的主进程。
这样单例和静态都有效。

@yk007
Copy link
Author

yk007 commented Jul 26, 2019

工作进程使用主进程会不会影响保活,是不是只需要改process即可,还有没有其他的地方需要改动,刚发现您也更新了这块,准备好好看看

@ShihooWang
Copy link
Owner

不影响的,主进程也可以看做是一个普通的进程。
在manifest中不配置Service的process属性,那么默认就工作在主进程中。

@ShihooWang
Copy link
Owner

你自定义的工作Service继承于AbsWorkService,这个工作Service写在你的manifest中

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants