我是新來的android和我一直在分析Android源代碼,以瞭解系統服務如何實現。我的問題是我能夠創建自己的系統服務並將其添加到框架中,以便所有應用程序都能夠訪問我的服務。 任何評論/代碼片段會有所幫助。如何在Android Framework中添加我們自己的系統服務?
感謝提前回復。
我是新來的android和我一直在分析Android源代碼,以瞭解系統服務如何實現。我的問題是我能夠創建自己的系統服務並將其添加到框架中,以便所有應用程序都能夠訪問我的服務。 任何評論/代碼片段會有所幫助。如何在Android Framework中添加我們自己的系統服務?
感謝提前回復。
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));
一個系統服務,更多的是需要。實質上,至少在Android 2.3中,必須擴展SystemServer.java,以便在system_server啓動時實例化新服務。
德州儀器友好提供一個很好的例子:
http://processors.wiki.ti.com/index.php/Android-Adding_SystemService
的的CyanogenMod SystemServer.java還爲在config.xml中動態加載系統服務作爲在陣列「config_vendorServices」定義的代碼(參見芯/res/res/values/config.xml),我相信它可以在供應商或設備目錄中被覆蓋。然而,我們並沒有試圖自己使用它,並且我不知道CyanogenMod是2.3還是通用的。[45]。
按照以下步驟在android框架中編寫自己的系統服務。
PS使用您的服務應用程序:如果您的服務得到一些致命異常,設備軟重啓,爲您服務是在系統服務運行。
第3步似乎要求您更改AOSP代碼? – zaitsman
@zaitsman是的,你可以查看這個源代碼http://processors.wiki.ti.com/index.php/Android-Adding_SystemService 雖然它不是主調,但它會給你基本的想法 –
您可以添加自己的服務,但沒有辦法添加系統服務,除非您可以修改框架源代碼。
系統服務正在system_sever中運行,並具有系統特權,這使得這些服務可以訪問正常應用程序服務無法訪問的系統資源。
This article explain in detail how the system service are implemented in Android.
由於謝里夫, 我可以實現Android框架內這個代碼片斷,讓自己的服務可以通過device.if所有應用程序共享的話,請讓我知道了實施步驟。 –
是的,但它需要IBinder和許多東西..只需檢查http://developer.android.com/reference/android/app/Service.html –
myService應該是MyService,除非您試圖混淆人們 –