Service的调用者如果是Activity的话,那在Activity退出后,Service的优先级较低,很容易被系统kill掉,所以建议把Service和Activity的进程分开,在Service组件的配置中加 android:process=":remote" 可以让Service独立到自己的进程里面,这样子,Activity被回收也不会牵连到Service了。但是这种方式,就会让你的程序有两个进程,涉及到跨进程通信,一个进程的内存空间无法被另一个进程直接读取,所以这时候,就要引入AIDL技术了。当然,进程之间除了通过内存访问这种方式传输数据,还可以使用文件,或者数据库。SharedPreferences 是一个比较简单的文件共享方式,可是也要注意SharedPreferences 默认情况下也不支持跨进程通讯,而是要设置调用模式为多进程才行,数据库就没有这样的限制。
SharedPreferences mPreferences = mContext.getSharedPreferences(CONFIG_FILE_NAME, Context.MODE_MULTI_PROCESS);
SharedPreferences mPreferences = mContext.getSharedPreferences(CONFIG_FILE_NAME, Context.MODE_MULTI_PROCESS);