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了。