Android核心服务学习笔记

本文通过实例介绍如何在Android中创建自定义核心服务,并解答了如何使用Java编写客户端和服务自动运行的方法。文中提供了具体的代码示例及配置说明。

主要参考资料:自定义Android核心服务实践

http://blog.chinaunix.net/uid/24940434/frmd/101688/fup/101690.html

非常感谢“工藤*新一”博主,让我学到不少东西。

按照这篇文章,可以实现一个完整的服务,但是我有一下2个疑问:

1、整个服务(客户端)都是咋NDK层实现的,如果客户端使用Java来写该如何做呢?

2、如何让这个服务自动运行呢?

 

参看这篇文章可以解决以上2个疑问: http://blog.youkuaiyun.com/zfzf294990051/article/details/7361081

以下代码同样出自:http://blog.youkuaiyun.com/zfzf294990051/article/details/7361081

先来回答第一个疑问:

下面是大体实现代码:

 1 package com.add.service;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.os.IBinder;
 6 import android.os.Parcel;
 7 import android.os.Process;
 8 import android.util.Log;
 9 import android.os.ServiceManager;
10 
11 public class DM3730ADDServiceActivity extends Activity {
12     private static final String Tag = "com.add.service.test";
13     /** Called when the activity is first created. */
14     @Override
15     public void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.main);
18         
19         test();
20     }
21     private void test()
22     {
23         try{
24             IBinder binder = ServiceManager.getService("zhang");
25             Parcel data = Parcel.obtain();
26             Parcel reply = Parcel.obtain();
27             if(binder == null){
28                 Log.d(Tag, "failed to get Service.");
29             }
30             data.writeInt(Process.myPid());
31             data.writeInt(100);
32             binder.transact(0, data, reply, 0);//执行远程调用
33             Log.d(Tag, "result = "+reply.readInt());//验证结果
34         }catch(Exception e){
35             e.printStackTrace();
36         }
37     }
38 }

 注:

 1   ………………
 2   data.writeInt(Process.myPid());
 3   data.writeInt(100);
 4   binder.transact(0, data, reply, 0);//执行远程调用
 5 
 6   //如果直接使用上面定义的data,reply,这么使用才行。
 7   data.recycle();
 8   reply.recycle();
 9 
10   data = Parcel.obtain();
11   reply = Parcel.obtain();
12   data.writeInt(Process.myPid());
13   data.writeInt(1200);
14   binder.transact(1, data, reply, 0);//执行远程调用
15   ………………

 

第二个疑问同样能再上面那个文章找到答案,我仍然做个记录:

修改启动脚本init.rc文件,使之在开机是启动服务addserver

1 #service addservice is a test
2 service addserver_zhang /system/bin/addserver

转载于:https://www.cnblogs.com/jevan/archive/2012/11/15/2771503.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值