已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
简易计算器,默认执行1+1的计算,点击go按钮执行计算,先看效果图,如下 首先建立一个ICallback.aidl文件,作为Activity中的回调方法Java代码/ My AIDL file, named SomeClass.aidlpackage com.zhang.test.service;/ See the list above for which classes need/ import statements (hint-most of them)/ Declare the erface ICallback / Methods can take 0 or more parameters, and/ return a value or void./ Methods can even take other AIDL-defined parameters./BankAccount createAccount(in String name, int startingDeposit, in IAtmService atmService);/ All non-Java primitive parameters (e.g., int, bool, etc) require/ a directional tag indicating which way the data will go. Available/ values are in, out, inout. (Primitives are in by default, and cannot be otherwise)./ Limit the direction to what is truly needed, because marshalling parameters/ is expensive.void showResult(int result);复制代码然后再建立一个IService.aidl用来在Activity中接收Service回调,以及在Service中onBind时返回的Binder 注意:aidl中import不能写com.xxx.*,要写全类的路径 Java代码 package com.zhang.test.service;import com.zhang.test.service.ICallback;interface IService void registerCallback(ICallback cb); void unregisterCallback(ICallback cb);复制代码接下来是service,CalculateService.java Java代码package com.zhang.test.service;import android.app.Service;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.os.RemoteCallbackList;import android.os.RemoteException;import android.util.Log;public class CalculateService extends Service private static final String TAG = MainService; public static final String ACTION_CALCUlATE = action_calculate; private RemoteCallbackList mCallbacks = new RemoteCallbackList(); private IService.Stub mBinder = new IService.Stub() Override public void unregisterCallback(ICallback cb) if (cb != null) mCallbacks.unregister(cb); Override public void registerCallback(ICallback cb) if (cb != null) mCallbacks.register(cb); ; /这里的BroadcastReceiver实现了Activity主动与Service通信 private BroadcastReceiver receiver = new BroadcastReceiver() Override public void onReceive(Context context, Intent intent) String action = intent.getAction(); if (ACTION_CALCUlATE.equals(action) int first; int second; try first = Integer.parseInt(intent.getStringExtra(first); second = Integer.parseInt(intent.getStringExtra(second); callBack(first, second); catch (NumberFormatException e) e.printStackTrace(); catch (Exception e) e.printStackTrace(); ; private Handler mHandler = new Handler() Override public void handleMessage(Message msg) /默认计算1+1 callBack(1, 1); super.handleMessage(msg); ; Override public IBinder onBind(Intent intent) Log.d(TAG, onBind); return mBinder; Override public void onCreate() Log.d(TAG, onCreate); / 这里不知道为什么,直接使用callback方法回调showResult / mCallbacks.beginBroadcast()是0,需要用handler延迟1000毫秒 / 也许是在activity中binService太耗时的原因? mHandler.sendEmptyMessageDelayed(0, 1000); super.onCreate(); IntentFilter filter = new IntentFilter(ACTION_CALCUlATE); registerReceiver(receiver, filter); Override public void onDestroy() mHandler.removeMessages(0); mCallbacks.kill(); super.onDestroy(); private void callBack(int first, int second) int N = mCallbacks.beginBroadcast(); try for (int i = 0; i N; i+) mCallbacks.getBroadcastItem(i).showResult(first + second); catch (RemoteException e) Log.e(TAG, , e); mCallbacks.finishBroadcast(); 复制代码然后是CalculateActivity: Java代码package com.zhang.test;import android.app.Activity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.os.RemoteException;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.CompoundButton;import android.widget.EditText;import android.widget.TextView;import com.zhang.test.service.ICallback;import com.zhang.test.service.IService;import com.zhang.test.service.CalculateService;public class CalculateActivity extends Activity private static final String TAG = MainActivity; private IService mService; private EditText first;/ 第一个计算数 private EditText second;/ 第二个计算数 private Button calculate;/ 计算按钮 private TextView result;/ 计算结果 /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); setUpViews(); setUpEvents(); Intent i = new Intent(this, CalculateService.class); bindService(i, mConnection, Context.BIND_AUTO_CREATE); private void setUpViews() first = (EditText) findViewById(R.id.first); second = (EditText) findViewById(R.id.second); calculate = (Button) findViewById(R.id.calculate); result = (TextView) findViewById(R.id.result); private void setUpEvents() calculate.setOnClickListener(new CompoundButton.OnClickListener() Override public void onClick(View v) Intent intent = new Intent(CalculateService.ACTION_CALCUlATE); intent.putExtra(first, first.getText().toString(); intent.putExtra(second, second.getText().toString(); sendBroadcast(intent); ); Override protected void onDestroy() if (mService != null) try mService.unregisterCallback(mCallback); catch (RemoteException e) Log.e(TAG, , e); / destroy的时候不要忘记unbindService unbindService(mConnection); super.onDestroy(); /* * service的回调方法 */ private ICallback.Stub mCallback = new ICallback.Stub() Override public void showResult(int result) Log.d(TAG, result : + result); CalculateActivity.this.result.setText(result + ); ; /* * 注册connection */ private ServiceConnection mConnection = new ServiceConnection() Override public void onServiceDisconnected(Comp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 油库防雷施工方案
- 栈道钢梁施工方案
- 冻库地面施工方案
- 白酒价值营销方案
- 河道工程采购合同范本
- 施工方案格式图文
- 家庭理发服务合同范本
- 钢筋栏施工方案
- 克拉运河施工方案
- 珠宝营销方案心得
- 财务管理实践与案例分析
- 学校校服验收管理制度
- 二次元谷子店创业计划
- 事理论国防安全
- 2024-2025学年新教材高中语文第三单元11.1过秦论课时作业含解析新人教版选择性必修中册
- 2025年四川省德阳市事业单位招聘笔试高频重点提升(共500题)附带答案详解
- 植保无人机飞行作业服务应急及突发事件处理方案
- 商转公配偶委托公证书模板
- 安全生产法律法规汇编(2025版)
- UPS电池更换更新的设计、施工、方案及注意事项(5篇材料)
- 初中英语固定搭配大全附专项练习
评论
0/150
提交评论