android系統服務
A. 如何創建android系統服務
1、 撰寫一個aidl文件,定義服務的介面,將在編譯過程中通過aidl工具生成對應的java介面。一般系統服務的aidl文件都放在framework\base\core\java\android\os目錄中。
以我所寫的IMyTool.aidl為例。在.aidl中定義自己需要加入的方法,編寫規則和java介面差不多,這里不多說。
2、 將aidl文件名添加到frameworks\base\目錄下的Android.mk編譯腳本文件中。
如:
LOCAL_SRC_FILES += \
core/java/android/accessibilityservice/.aidl\
…\
core/java/android/os/IMyTool.aidl\
…
IMyTool.aidl即我加進去的aidl文件,加入後才能在make過程中編譯到,否則將在後面的SystemServer添加系統服務時會報錯提示找不到對應類。
3、 編寫真正工作的服務類,繼承IMyTool.Stub類(AIDL文件名.Stub,aidl生成的介面中的內部類,是一個Binder)。
服務類一般都放在framework\base\services\java\com\android\server目錄中。
例如:
public class MyToolService extends IMyTool.Stub {
實現IMyTool.aidl中定義的介面。
}
4、 將自定義服務注冊到SystemServer,使得開機過程中被添加。
在framework\base\services\java\com\android\server目錄中的SystemServer中啟動服務代碼處加入:
try {
Slog.i(TAG, "MyToolService");
ServiceManager.addService(Context.MY_TOOL_SERVICE,new MyToolService(context));// MyToolService構造函數自己定義,一般都會用到Context
} catch(Throwable e) {
Slog.e(TAG, "Failure startingMyToolService", e);
}
上面代碼中Context.MY_TOOL_SERVICE是自己在Context類中定義的常量,也就是給服務定義的名字,使用常量方便獲取服務,而不需要記住注冊服務時用的名字,且想換名字時只需改一個常量的值。
B. Android中Service服務有哪些
Service分為本地服務(LoaclService)和遠程服務(RemoteService)。
本地服務:用於應用程序內部,這也與客戶端(可以理解也activity)進行通信就很方便。
遠程服務:用於android系統內部的應用程序之間。
C. 安卓手機系統有個叫,<操作系統服務>,是什麼她走流量非常猛
這個是安卓操作系統底層走的流量,把手機很多信息發給Google或者二次開發者,更多的是自動下載很多廣告。
因為是底層的,不想普通軟體那些外部應用,所以無法刪除,有希望解決的辦法就是用刷機精靈重新刷機,刷個底層流量消耗比較少的系統ROM給手機,至少二次開發者那邊的流量消耗會下來一些。
D. 安卓哪些系統服務可以禁止可以刪除嗎
安卓手機或平板電腦的話,出廠的時間都會被廠商強制安裝很多的軟體,其中很多是你很少使用或根本不用的。但這些垃圾軟體都是被廠商鎖定的ROM內的。不能隨意刪除。
想刪除的話,第一步就是先把手機做一下ROOT,即強制獲取安卓系統的ROOT許可權,方法你可以去手機論壇,找到你手機對應(一定要對應,即手機的硬體和系統軟體版本都完全對應)的成功ROOT的帖子,一步步就可以搞定。
有了ROOT許可權後,你就可以隨意刪除手機上的軟體了,安卓系統本身都可以刪除(除非你不想用手機了)。只要你認為是沒用的軟體都可以刪,推薦你用 《安卓優化大師》,可以自動在你刪除系統自身軟體時幫你備份,後悔了可以再安裝上。
E. 如何往Android系統中添加系統服務
仔細閱讀源碼可以發現,在frameworks/base/services/Java/com/Android/server/SystemServer.java中添加了很多服務,什麼熵信息、電量、wife等等服務,這些服務啟動都在launcher之前,一般要繼承Binder或者繼承一個AIDL。下面試著來添加一個簡單系統服務
一。在frameworks/base/core/java/android/os/ 增加一個aidl文件,最後用aidl工具生產一個Java文件,這樣可以方便後面:
[html] view plain
package android.os;
[html] view plain
/**
* Interface that allows controlling and querying YtTts connectivity.
*
* {@hide}
*/
interface IYtTtsService{
/**
* 播放Text文字
*/
int speak(String text);
}
然後在修改/frameworks/base/Android.mk,在LOCAL_SRC_FILES里添加一行:core/java/android/os/IYtTtsService.aidl \
不確定補充:把AIDL文件寫在這個地方似乎可以避免加@hide
二 。在frameworks/base/services/java/com/android/server/ 新建要增加的service,繼承上面aidl生產的java:
[html] view plain
package com.android.server;
import android.content.Context;
import android.os.IYtTtsService;
import android.os.RemoteException;
import android.util.Log;
[html] view plain
public class YtTtsService extends IYtTtsService.Stub {
private WorkerThread mWorker;
public YtTtsService(Context context) {
super();
mWorker = new WorkerThread("YtTtsServiceWorker");
mWorker.start();
Log.i("[YT]", "In YtTtsService-->"+context);
}
@Override
public int speak(String text) throws RemoteException {
Log.i("[YT]", "In YtTtsService-->"+text);
return 0;
}
private class WorkerThread extends Thread{
int i = 0;
public WorkerThread(String name) {
super(name);
}
public void run() {
while(true){
i++;
Log.i("[YT]", "In YtTtsService-->WorkerThread running "+i);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
三。在frameworks/base/services/java/com/android/server/SystemServer.java, ServerThread中run()方法中增加代碼:
[html] view plain
try {
Log.i("[YT]", "In SystemServer, YtTts add..");
ServiceManager.addService("yttts", new YtTtsService(context));
} catch (Throwable e) {
Log.i("[YT]", "In SystemServer, YtTts add err..");
}
5.在/frameworks/base/core/java/cn/youngtone/tts建一個YtTtsManager類,用於管理YtTtsService:
[html] view plain
package cn.youngtone.tts;
import android.content.Context;
import android.os.IYtTtsService;
import android.os.RemoteException;
import android.util.Log;
public class YtTtsManager {
IYtTtsService service;
public YtTtsManager(Context context ,IYtTtsService service) {
this.service = service;
}
public void speak(String text) {
try {
Log.e("[YT]" , "In YtTtsManage-->speak():"+text);
service.speak(text);
} catch (RemoteException e) {
Log.e("[YT]" , "In YtTtsManage-->E:RemoteException");
e.printStackTrace();
}
}
}
四。 在ContextImpl getSystemService中添加代碼:
[java] view plain
if ("yttts".equals(name)) {
[java] view plain
if (mYtTtsManager == null) {
IBinder b = ServiceManager.getService("yttts");
IYtTtsService service = IYtTtsService.Stub.asInterface(b);
mYtTtsManager = new YtTtsManager(this, service);
}
return mYtTtsManager;
}
五。測試代碼
[java] view plain
YtTtsManager mManager = (YtTtsManager)getSystemService("yttts");
mManager.speak("這是一個簡單的系統服務!");
END.
參考:http://blog.csdn.net/aiai373824745/article/details/7439896
F. 請問android系統中的進程,任務,服務三者的區別和聯系
進程是總稱,包括第三方應用和系統應用以及系統底層模塊。任務是你安裝的第三方應用進程。而服務是系統模塊進程。
G. 安卓系統服務是什麼
是安卓的核心服務,缺少將無法運行安卓系統
H. 手機後台一直有一個android system service的東西怎樣關閉
屬於惡意程序,會自動靜默下載安裝多款應用,很難清除,刪除之後過段時間還會自動安裝。
I. Android系統服務怎麼卸載
首先獲取root,之後用幸運破解器完美卸載~~~re管理器打開system/app文件夾刪掉也可以
J. 如何在android系統中開啟自己的服務
Android開機啟動Service,需要使用BroadcastReceiver,Android系統,開機會發送一個開機廣播,可以通過BroadcastReceiver來接收開機廣播。
具體代碼:
1.在配置文件AndroidManifest.xml中向系統注冊receiver
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
2.需要添加相應許可權
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
3.在Receiver中就可以添加開機需要進行的操作
public class BootCompletedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
4.執行開機後的操作,Intent intent = new Intent(context,Service.class); context.startService(intent); 這樣即可開機啟動Service了。