用AIDL 实现service 主动发送消息给activity
来源:互联网 发布:数控火焰切割编程代码 编辑:程序博客网 时间:2024/05/22 08:23
题目详情
1、实现一个activity和一个service,它们在不同的进程
2、service每隔3-5秒钟产生10条数据(10个数字,每个数字随即为1-100),然后发送给activity
3、并且activity用listview显示这些数据
思路
实现两个aidl接口,一个用于通知service产生数据,一个用于 service 通知activity更新数据
效果图
代码
两个aidl文件如下:
IGetData.aidl
import com.qunar.yuzhiyun.IClientCallBack;interface IGetData { void register(IClientCallBack callback); void startCreateData();}
IClientCallBack.aidl
interface IClientCallBack { void update(in List<String> arrayList);}
DataSourceService.java
public class DataSourceService extends Service { volatile boolean needToRun; public DataSourceService() { } @Override public IBinder onBind(Intent intent) { return binder; } @Override public boolean onUnbind(Intent intent) { needToRun=false; return super.onUnbind(intent); } IGetData.Stub binder=new IGetData.Stub() { IClientCallBack callBack; @Override public void register(IClientCallBack callback) throws RemoteException { this.callBack=callback; } @Override public void startCreateData() throws RemoteException { needToRun=true; final ArrayList<String> arrayList=new ArrayList<>(); Thread thread=new Thread(new Runnable() { @Override public void run() { int interval; while (needToRun){ arrayList.clear(); interval=3+ (int)(Math.random()*3); Log.i("time",""+interval); try { Thread.sleep(interval*1000); } catch (InterruptedException e) { e.printStackTrace(); } for(int i=0;i<10;i++){ Random random=new Random(); arrayList.add((int)(random.nextInt(100))+""); } if (callBack!=null) try { //数据推送到客户端(Activity) callBack.update(arrayList); } catch (RemoteException e) { e.printStackTrace(); } } } }); thread.start(); } };}
MainActivity.java
public class MainActivity extends AppCompatActivity { ListView lvNumber; IGetData iGetData; ArrayAdapter<String> adapter; ArrayList<String> stringList; Intent intent; ServiceConnection connection=new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { iGetData=IGetData.Stub.asInterface(service); try { iGetData.register(new IClientCallBack.Stub(){ @Override public void update(List<String> arrayList) throws RemoteException { Message message=new Message(); message.obj=arrayList; handler.sendMessage(message); } }); iGetData.startCreateData(); } catch (RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { } }; Handler handler=new UpDataHandler(MainActivity.this); static class UpDataHandler extends Handler{ WeakReference<Activity> weakReference; UpDataHandler(Activity activity){ weakReference=new WeakReference<Activity>(activity); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); MainActivity activity= (MainActivity) weakReference.get(); if(activity!=null) { activity.stringList.clear(); activity.stringList.addAll((ArrayList<String>) msg.obj); activity.adapter.notifyDataSetChanged(); } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvNumber= (ListView) findViewById(R.id.lvNumber); stringList=new ArrayList<>(); stringList.add("1"); stringList.add("2"); stringList.add("3"); adapter=new ArrayAdapter<String>(this,R.layout.support_simple_spinner_dropdown_item,stringList); lvNumber.setAdapter(adapter); intent=new Intent(MainActivity.this,DataSourceService.class); bindService(intent,connection, Context.BIND_AUTO_CREATE); } @Override protected void onPause() { super.onPause(); unbindService(connection); stopService(intent); }}
阅读全文
0 0
- 用AIDL 实现service 主动发送消息给activity
- 使用AIDL实现IPC通信之——实现服务端主动发送数据给客户端
- Service给 Activity传递消息
- ReactNative学习笔记-Native主动发送消息给JS
- 实现Activity发送数据给Service ,基于Message和Bundle发送复杂数据
- Android中Service发送广播给activity
- Service 如何给 Activity 发送 Message?
- AIDL解析(二 )让Service主动调起Activity吧!
- 初识 Service(三) 演示:Service给 Activity传递消息
- 怎么实现服务器给android客户端主动推送消息
- 2、Java WebSocket实现服务端主动发消息给客户端
- 如何实现服务器给android客户端主动推送消息
- Android进阶(二) Activity调用Service 通过AIDL实现
- 微信开发 获取Token、主动给企业成员发送消息
- 微信企业号给关注的用户主动发送推送消息
- 【fastweixin框架教程6】微信企业号给关注的用户主动发送推送消息
- 微信-获取Token,主动给企业成员发送消息(3)
- service实现AIDL
- Android开发集成科大讯飞语音识别+语音合成功能
- List 去除相同数据
- mybatis中将varchar字段类型修改为clob
- zcmu-1182(大数相减)
- SVN图标设置找回
- 用AIDL 实现service 主动发送消息给activity
- HDU2222 Keywords Search(AC自动机)
- android客户端界面加载处理方法
- 在Linux系统下,Vi命令模式和编辑模式如何切换?
- ButterCMS架构:完成数百万次调用的关键任务API
- HttpClient的基础使用
- 深度探索TLD的C++源码,多图慎入
- 微信自定义菜单开发json拼接
- 事务从集中式到分布式的转变