我是Android新手,我一直在分析android源代码,以了解系统服务是如何实现的。我的问题是我能够创建自己的系统服务并将其添加到框架中,以便所有应用程序都能够访问我的服务。 任何评论/代码片段都会有所帮助。
提前感谢Replier。
答案 0 :(得分:15)
对于系统服务,需要更多。从本质上讲,至少对于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]。
答案 1 :(得分:10)
您可以添加自己的服务,但无法添加系统服务,除非您可以修改框架源代码。
系统服务在system_sever中运行,具有系统权限,允许这些服务可以访问普通应用程序服务无法访问的系统资源。
This article explain in detail how the system service are implemented in Android.
答案 2 :(得分:6)
按照以下步骤在android框架中编写自己的系统服务。
PS:如果您的服务遇到致命异常,设备将软重启,因为您的服务在系统服务下运行。
答案 3 :(得分:3)
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;
}
}
在您的活动中:
if(!MyService.isInstanceCreated())
startService(new Intent(YourActivityClassName.this, MyService.class));