如何在Android Framework中添加我们自己的系统服务?

Sak*_*oid 14 android android-service

我是android新手,我一直在分析android源代码,以了解系统服务是如何实现的.我的问题是我能够创建自己的系统服务并将其添加到框架中,以便所有应用程序都能够访问我的服务.任何评论/代码片段都会有所帮助.

感谢Replier提前.

Pek*_*der 17

对于系统服务,需要更多.从本质上讲,至少对于Android 2.3,必须扩展SystemServer.java,以便在system_server启动时实例化新服务.

德州仪器公司提供了一个很好的例子:

http://processors.wiki.ti.com/index.php/Android-Adding_SystemService

CyanogenMod SystemServer.java还有用于动态加载系统服务的代码,如config.xml中的数组"config_vendorServices"中所定义(请参阅core/res/res/values/config.xml),我认为可以在供应商中覆盖或设备目录.但是,我们并没有尝试过自己使用它,而且我不知道这是否是CyanogenMod特定或共同的2.3.[45].


pie*_*fou 10

您可以添加自己的服务,但无法添加系统服务,除非您可以修改框架源代码.

系统服务在具有系统特权的system_sever中运行,这允许那些服务可以访问普通应用程序服务无法访问的系统资源.

本文详细介绍了如何在Android中实现系统服务. 在此输入图像描述


小智 7

按照以下步骤在android框架中编写自己的系统服务.

  1. 使用继承存根的API公开自己的服务/经理.
  2. 为您的服务创建一个aidl文件,以在构建中公开和包含.
  3. 在System Server中添加您的服务,您的服务将与所有核心服务一起启动.
  4. 在context impl文件中注册您的服务上下文.
  5. 通过调用getSystemService(服务的上下文)在应用程序中使用您的服务

PS:如果您的服务遇到致命异常,设备将软重启,因为您的服务在系统服务下运行.


She*_*tib 2

public class MyService extends Service {

    private static MyService instance = null;

    public static boolean isInstanceCreated(){
        return instance != null;
    }
    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }
    @Override     
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId); 
        //Toast.makeText(this, "onStart", Toast.LENGTH_SHORT).show();
        } 
    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
        new Thread(threadBody).start();
    }
    @Override     
    public void onDestroy() {
        instance = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的活动中:

if(!MyService.isInstanceCreated())
        startService(new Intent(YourActivityClassName.this, MyService.class)); 
Run Code Online (Sandbox Code Playgroud)

  • @I_AM_PANDA 我刚刚读过这篇文章。谢谢您,我将编辑答案。另一方面,你将我的试验限制在人身上,我几乎感到受到了侮辱。我也希望/试图迷惑机器人、外星人,或许还有其他生物或非生物。 (4认同)