Android系统在新进程中启动自定义服务过程(sta

在编写Android应用程序时,我们一般将一些计算型的逻辑放在一个独立的进程来处理,这样主进程仍然可以流畅地响应界面事件,提高用户体验。Android系统为我们提供了一个Service类,我们可以实现一个以Service为基类的服务子类,在里面实现自己的计算型逻辑,然后在主进程通过startService函数来启动这个服务。在本文中,将详细分析主进程是如何通过startService函数来在新进程中启动自定义服务的。

在主进程调用startService函数时,会通过Binder进程间通信机制来通知ActivitManagerService来创建新进程,并且启动指定的服务。在Android系统中,Binder进程间通信机制使用非常广泛,因此,希望读者在继续阅读下面的内容之前,对Android系统和Binder进程间通信机制有一定的了解,具体可以参考前面Android进程间通信(IPC)机制Binder简要介绍和学习计划一文。

关于startService的具体用法,可以参考前面Android系统匿名共享内存Ashmem(Anonymous Shared Memory)简要介绍和学习计划一文中用到的实例,它是Activity类的一个成员函数:

package shy.luo.ashmem;      ......      public class Client extends Activity implements OnClickListener {       ......       IMemoryService memoryService = null;       ......          @Override       public void onCreate(Bundle savedInstanceState) {           ......              IMemoryService ms = getMemoryService();           if(ms == null) {                       startService(new Intent("shy.luo.ashmem.server"));           } else {               Log.i(LOG_TAG, "Memory Service has started.");           }              ......              Log.i(LOG_TAG, "Client Activity Created.");       }          ......   }  

这里的“shy.luo.ashmem.server”是在程序配置文件AndroidManifest.xml配置的Service的名字,用来告诉Android系统它所要启动的服务的名字:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"       package="shy.luo.ashmem"       android:sharedUserId="android.uid.system"       android:versionCode="1"       android:versionName="1.0">           <application android:icon="@drawable/icon" android:label="@string/app_name">               ......               <service                    android:enabled="true"                    android:name=".Server"                   android:process=".Server" >                       <intent-filter>                           <action android:name="shy.luo.ashmem.server"/>                           <category android:name="android.intent.category.DEFAULT"/>                       </intent-filter>               </service>           </application>   </manifest>  

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwddpy.html