- 浏览: 399968 次
文章分类
- 全部博客 (327)
- Android (114)
- Java (13)
- Java基础 (14)
- Glib (2)
- linux (15)
- extjs (5)
- eclipse (2)
- Asterisk (56)
- MYSQL (6)
- 数据库 (9)
- PHP (7)
- C# (18)
- 杂谈~~ (1)
- web开发前端 (3)
- 网络编程 (2)
- Opensips (2)
- voip (3)
- debian (7)
- openfire (15)
- wordpress (1)
- 版本控制 (1)
- Android 线程服务广播 (1)
- SRTP (2)
- 单片机及ARM等 (3)
- 基础知识 (5)
- asp.net (2)
- 单片机 (1)
- 设计模式及架构 (1)
- 安全 (1)
- Cubieboard 草莓树莓各类派 Android开发板 (1)
- J2EE (2)
- BootStrap (3)
- BootStrap web前端开发 (1)
- web前端开发 (4)
- object-c (1)
- openwrt (8)
- 智能家居 (4)
- Node.js (4)
最新评论
-
xiaoxiecomeon:
你这个程序一存在线程的时间片相互抢占的问题,运行时间长了很可能 ...
Runnable 和 Thread -
dotjar:
我觉得话应该这么说:引用TestThread tt = new ...
Runnable 和 Thread -
dagf113225:
调用TelephonyManager的隐藏API是先参考Fra ...
Android提高第十四篇之探秘TelephonyManager
在AIDL中让Service调用Activity的方法 然后再建立一个IService.aidl用来在Activity中接收Service回调,以及在Service中onBind时返回的Binder 接下来是service: 然后是activity: 最后不要忘记在manifest中加上service标记:
代码:
首先建立一个ICallback.aidl文件,作为Activity中的回调方法
2
3 interface ICallback {
4 void showResult(int result);
5 }
注意:aidl中import不能写com.xxx.*,要写全类的路径
2
3 import com.zhang.test.service.ICallback;
4
5 interface IService {
6 void registerCallback(ICallback cb);
7 void unregisterCallback(ICallback cb);
8 }
MainService.java
2
3 import android.app.Service;
4 import android.content.Intent;
5 import android.os.Handler;
6 import android.os.IBinder;
7 import android.os.Message;
8 import android.os.RemoteCallbackList;
9 import android.os.RemoteException;
10 import android.util.Log;
11
12 public class MainService extends Service {
13
14 private static final String TAG = "MainService";
15
16 private RemoteCallbackList<icallback> mCallbacks = new RemoteCallbackList<icallback>();
17
18 private IService.Stub mBinder = new IService.Stub() {
19
20 @Override
21 public void unregisterCallback(ICallback cb){
22 if(cb != null) {
23 mCallbacks.unregister(cb);
24 }
25 }
26
27 @Override
28 public void registerCallback(ICallback cb){
29 if(cb != null) {
30 mCallbacks.register(cb);
31 }
32 }
33 };
34
35 @Override
36 public IBinder onBind(Intent intent) {
37 Log.d(TAG, "onBind");
38 return mBinder;
39 }
40
41 @Override
42 public void onCreate() {
43 Log.d(TAG, "onCreate");
44 //这里不知道为什么,直接使用callback方法回调showResult
45 //mCallbacks.beginBroadcast()是0,需要用handler延迟1000毫秒
46 //也许是在activity中binService太耗时的原因?
47 mHandler.sendEmptyMessageDelayed(0, 1000);
48 super.onCreate();
49 }
50
51 @Override
52 public void onDestroy() {
53 mHandler.removeMessages(0);
54 mCallbacks.kill();
55 super.onDestroy();
56 }
57
58 private void callBack() {
59 int N = mCallbacks.beginBroadcast();
60 try {
61 for (int i = 0; i < N; i++) {
62 mCallbacks.getBroadcastItem(i).showResult(i);
63 }
64 } catch (RemoteException e) {
65 Log.e(TAG, "", e);
66 }
67 mCallbacks.finishBroadcast();
68 }
69
70 private Handler mHandler = new Handler() {
71
72 @Override
73 public void handleMessage(Message msg) {
74 callBack();
75 super.handleMessage(msg);
76 }
77 };
78 }
79 </icallback></icallback>
2
3 import android.app.Activity;
4 import android.content.ComponentName;
5 import android.content.Context;
6 import android.content.Intent;
7 import android.content.ServiceConnection;
8 import android.os.Bundle;
9 import android.os.IBinder;
10 import android.os.RemoteException;
11 import android.util.Log;
12
13 import com.zhang.test.service.ICallback;
14 import com.zhang.test.service.IService;
15 import com.zhang.test.service.MainService;
16
17 public class MainActivity extends Activity {
18
19 private static final String TAG = "MainActivity";
20
21 private IService mService;
22
23 /** Called when the activity is first created. */
24 @Override
25 public void onCreate(Bundle savedInstanceState) {
26 super.onCreate(savedInstanceState);
27 setContentView(R.layout.main);
28 Intent i = new Intent(this, MainService.class);
29 bindService(i, mConnection, Context.BIND_AUTO_CREATE);
30 }
31
32 @Override
33 protected void onDestroy() {
34 if(mService!=null){
35 try {
36 mService.unregisterCallback(mCallback);
37 } catch (RemoteException e) {
38 Log.e(TAG, "", e);
39 }
40 }
41 //destroy的时候不要忘记unbindService
42 unbindService(mConnection);
43 super.onDestroy();
44 }
45
46 /**
47 * service的回调方法
48 */
49 private ICallback.Stub mCallback = new ICallback.Stub() {
50
51 @Override
52 public void showResult(int result) {
53 Log.d(TAG, " result : " + result);
54 }
55 };
56
57 /**
58 * 注册connection
59 */
60 private ServiceConnection mConnection = new ServiceConnection() {
61
62 @Override
63 public void onServiceDisconnected(ComponentName name) {
64 Log.d(TAG, "onServiceDisconnected");
65 mService = null;
66 }
67
68 @Override
69 public void onServiceConnected(ComponentName name, IBinder service) {
70 Log.d(TAG, "onServiceConnected");
71 mService = IService.Stub.asInterface(service);
72 try {
73 mService.registerCallback(mCallback);
74 } catch (RemoteException e) {
75 Log.e(TAG, "", e);
76 }
77 }
78 };
79 }
2 </service>
总结:
通过aidl总算实现了Service与Activity的通信,写起来麻烦点,使用诸如ContentProvider,Broadcast等也可以实现.
这样做很像是在使用MVC设计模式(Activity负责View,Service以及其他类负责 Model,aidl(ServiceConnection)负责Controller)
发表评论
-
直接拿来用!最火的Android开源项目整理
2015-09-16 10:13 579一、代码库 1、from 代码家 整理比较好的源 ... -
探讨android更新UI的几种方法
2014-06-09 23:27 596今天讲的内容非常简单,只是讲讲有关于android界面更新的 ... -
Android 滑动切换页面 以及屏幕手势
2014-05-08 17:49 496手机进入智能机时代,触摸屏也已成为主流之势,原来的手机按键也 ... -
android 用Achartengine 作图
2014-05-08 16:55 725Achartengine 是google的一 ... -
Android中使用Animation实现控件的动画效果以及Interpolator和AnimationListener的使用
2014-05-08 16:28 731Animation的4个基本动画效果 What is An ... -
java.lang.ClassNotFoundException: Didn't find class "android.support.v4.view.Vie
2014-05-06 14:43 2884Android错误:Caused by: java.lang ... -
Android Socket通信如何设置超时时间
2014-05-06 14:14 1033其实关于这个问题可能用到的人不会很多,不过我在这里还是说说。 ... -
【转】Android本地语音识别引擎PocketSphinx-语言建模
2014-02-13 10:35 1781Android本地语音识别引擎PocketSphinx- ... -
关于build.prop原始Dalvik虚拟机设定与调整
2013-09-05 10:40 1241原厂S3 台版 1GB Ramsystem/build.pro ... -
Android中Service与IntentService的使用比较
2013-09-04 15:24 1169该博客来自网络——— ... -
android 应用程序Activity之间数据传递与共享的几种途径
2013-08-01 17:24 8891.基于消息的通信机制 Intent ---boud ... -
android数据通信方式
2013-08-01 17:15 887http://www.itkee.com/develope ... -
“android.intent.category.DEFAULT”的目的是什么?
2013-07-31 16:43 5211、要弄清楚这个问题,首先需要弄明白什么是implicit( ... -
集成拨号盘,2句话的事情
2013-07-30 15:45 585<intent-filter> < ... -
Android TabHost动态加载内容总结
2013-07-25 17:49 935前面用继承TabActivity的方法很好的完成了,TabHo ... -
[Android实例] android json
2013-07-17 15:20 636import java.io.ByteArrayOutput ... -
android json解析及简单例子
2013-07-17 15:19 908JSON的定义: 一种轻量级的数据交换 ... -
AsyncTask的用法-UI刷新发放
2013-07-15 14:50 646在开发Android应用时必须遵守单线程模型的原则: A ... -
java.lang.OutOfMemoryError处理错误
2013-07-15 14:41 643java.lang.OutOfMemoryError异常解决 ... -
关于android.view.WindowLeaked异常的解决方案
2013-07-15 10:34 594Android.view.WindowLeaked按字面了解, ...
相关推荐
aidl双向通信,Service加回调刷新自身Activity
12.3.1 在Android应用中使用 OpenGL ES 454 12.3.2 绘制平面上的多边形 457 12.3.3 旋转 463 12.4 绘制3D图形 465 12.4.1 构建3D图形 465 12.4.2 应用纹理贴图 469 12.5 本章小结 475 第13章 ...
一共有两个项目,一个项目充当服务端,使用aidl进程通信控制另一个项目,播放音乐,其中还包括Activity和Service之间的通信方案,Parcel绑定和接口回调……
12.3.1 在Android应用中使用 OpenGL ES 454 12.3.2 绘制平面上的多边形 457 12.3.3 旋转 463 12.4 绘制3D图形 465 12.4.1 构建3D图形 465 12.4.2 应用纹理贴图 469 12.5 本章小结 475 第13章 Android的网络应用 476 ...
12.3.1 在Android应用中使用 OpenGL ES 454 12.3.2 绘制平面上的多边形 457 12.3.3 旋转 463 12.4 绘制3D图形 465 12.4.1 构建3D图形 465 12.4.2 应用纹理贴图 469 12.5 本章小结 475 第13章 Android的网络应用 476 ...
除了添加基本系统服务, 其中还包含添加JNI部分代码和App通过AIDL调用的演示Demo, 调用包含App调用服务端, 也包含服务端回调App, 也就是完成一个简单的双向通信. 注: 测试代码基于Android 7.1.1, 其他Android版本都...
第10章、Service与BroadcastReceiver 10.1、Service:Service的创建、配置、启动、停止、绑定和通信; Service的生命周期; 10.2、跨进程调用Service(AIDL服务):创建AIDL文件; 将接口暴露给客户端; 客户端访问AIDL...
第10章、Service与BroadcastReceiver 10.1、Service:Service的创建、配置、启动、停止、绑定和通信; Service的生命周期; 10.2、跨进程调用Service(AIDL服务):创建AIDL文件; 将接口暴露给客户端; 客户端访问AIDL...
13.2.6 响应handleMessage回调 13.3 使用工作线程 13.3.1 从菜单调用工作线程 13.3.2 在工作线程与主线程之间通信 13.3.3 线程行为概述 13.4 处理程序示例驱动程序类 13.4.1 驱动程序活动文件 ...
13.2.6 响应handleMessage回调 13.3 使用工作线程 13.3.1 从菜单调用工作线程 13.3.2 在工作线程与主线程之间通信 13.3.3 线程行为概述 13.4 处理程序示例驱动程序类 13.4.1 驱动程序活动文件 ...
|--回调函数的定义 |--图片之BitMap、Drawable、inputStream及byte[] 互转 |--图片之保存图片至SD卡 |--图片之删除40%最近没有被使用的 |--图片之的本地缓存至SD卡 |--图片之网络异步下载图片 |--图片之获取SD卡所有...