Android 使用 aidl 文件创建服务示例
2011-09-12 16:35
731 查看
android中的服务与其他软件的服务可能有些不同,它用来实现在后台执行长期的任务,并且与前台界面解耦.现在来实现一个HelloWorld级的服务以及使用这个服务,创建一个服务的步骤如下:
1.编写aidl文件,在这个文件中提供了服务所提供的方法的接口,文件的扩展名为aidl,在我们的示例中命名为IDataTimeService.aidl文件的内容为如下所示:
1.编写aidl文件,在这个文件中提供了服务所提供的方法的接口,文件的扩展名为aidl,在我们的示例中命名为IDataTimeService.aidl文件的内容为如下所示:
package com.services.demo2; interface IDataTimeService { String getForecastPage(); }2.编写服务的实现类,在这个示例中为DataTimeService.java,内容如下:
public class DataTimeService extends Service{ public static final String BROADCAST_ACTION = "com.services.demo2.DataTimeServiceEvent"; /** 使用上面定义的字符串常量创建一个Intent的实例,如果服务在运行的过程中发生的事件都可以通过Service的 sendBroadcast(broadcast)方法来发送一个广播消息通知Activity,然后有Activity注册的接收者进行处理; */ private Intent broadcast = new Intent(BROADCAST_ACTION); sendBroadcast(broadcast); private final IDataTimeService.Stub binder = new IDataTimeService.Stub() { public String getForecastPage() { return (getForecastPageImpl()); } }; synchronized private String getForecastPageImpl() { Date date=new Date(); return (date.toLocaleString()); } @Override public IBinder onBind(Intent intent) { return (binder); } }3.现在编写一个Activity,来消费这个服务:
public class ServicesDemo2 extends Activity { private IDataTimeService service = null; private Intent serviceIntent = null; private WebView browser; private ServiceConnection svcConn = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder binder) { service = IDataTimeService.Stub.asInterface(binder); browser.postDelayed(new Runnable() { public void run() { updateForecast(); } }, 1000); } public void onServiceDisconnected(ComponentName className) { service = null; } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); browser = (WebView) findViewById(R.id.webkit); serviceIntent = new Intent(this, DataTimeServiceImpl.class); //绑定一个服务 bindService(serviceIntent, svcConn, BIND_AUTO_CREATE); } @Override public void onResume() { super.onResume(); /** 注册广播消息的接收者,在android中服务与Activity的通信依靠广播发送消息,然后由Activity注册的接收者 接收到消息,进行相应的处理这里使用DataTimeServiceImpl.BROADCAST_ACTION来过滤,表明它只接收 DataTimeService中的调用sendBroadcast(broadcast)发送的广播消息; */ registerReceiver(receiver, new IntentFilter( DataTimeServiceImpl.BROADCAST_ACTION)); } @Override public void onPause() { super.onPause(); unregisterReceiver(receiver); } @Override public void onDestroy() { super.onDestroy(); unbindService(svcConn); } private void updateForecast() { try { String page = service.getForecastPage(); if (page != null) { browser.loadDataWithBaseURL(null, page, "text/html", "UTF-8",null); browser.postDelayed(new Runnable() { public void run() { updateForecast(); } }, 1000); } } catch (final Throwable t) { svcConn.onServiceDisconnected(null); } } //接收者实例 private BroadcastReceiver receiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { runOnUiThread(new Runnable() { public void run() { updateForecast(); } }); } }; }
相关文章推荐
- Android 使用 aidl 文件创建服务示例
- Android:AIDL服务创建与使用
- Android应用组件之服务(Service)---使用清单文件声明服务
- 简单的android进程间(远程)服务通信示例【AIDL方式】
- Docker应用示例1--使用Docker创建Web服务
- Android 使用【AIDL】调用外部服务
- 使用Xcode为iOS应用项目创建PCH文件的方法及应用示例
- 使用micro包创建文件上传微服务并使用Schema Stiching应用微服务的若干“坑”及解决对策
- Node.js创建HTTP文件服务器的使用示例
- Android创建Service后台常驻服务并使用Broadcast通信
- android service探究(附:使用服务功能下载文件)
- java使用创建Word文件示例
- Android 使用Vector XML文件创建矢量图片资源
- Android 使用【AIDL】调用外部服务
- Android -- service 服务的创建与使用,生命周期,电话监控器
- Android 使用【AIDL】调用外部服务
- Android 使用【AIDL】调用外部服务
- Android Studio怎样创建和使用aar文件
- Android 中使用预先创建的数据库文件
- android创建以及使用SDcard镜像文件