在Android中实现service动态更新UI界面
16lz
2022-07-04
之前我们曾向您介绍过Android的UI设计与后台线程交互,据Android API的介绍,service一般是在后台运行的,没有界面的。那么如何实现service动态更新UI界面呢?
案例:通过service向远程服务器发送请求,根据服务器返回的结果动态更新主程序UI界面,主程序可实时关闭或重启服务。
注册BroadcastReceiver
在主程序activity中注册一个BroadcastReceiver,用于接收Service发布的广播。
- @Override
- protectedvoidonStart(){//重写onStart方法
- dataReceiver=newDataReceiver();
- IntentFilterfilter=newIntentFilter();//创建IntentFilter对象
- filter.addAction("com.justel.serviceBC");
- registerReceiver(dataReceiver,filter);//注册BroadcastReceiver
- super.onStart();
- }
停止service命令
主程序activity可发布广播,用于向后台service传递数据或控制信息,如停止service命令。
- btnStop.setOnClickListener(newOnClickListener(){//为按钮添加点击事件监听
- @Override
- publicvoidonClick(Viewv){//重写onClick方法
- IntentmyIntent=newIntent();//创建Intent对象
- myIntent.setAction("com.justel.service");
- myIntent.putExtra("cmd",CMD_STOP_SERVICE);
- sendBroadcast(myIntent);//发送广播
- }
- });
接收广播
后台service注册BroadCastReceiver用于接受主程序发送的广播
- @Override
- publicintonStartCommand(Intentintent,intflags,intstartId){//重写onStartCommand方法
- IntentFilterfilter=newIntentFilter();//创建IntentFilter对象
- filter.addAction("com.justel.service");
- registerReceiver(cmdReceiver,filter);//注册BroadcastReceiver
- doJob();//调用方法启动线程,自己来完成
- returnsuper.onStartCommand(intent,flags,startId);
- }
实时发送
后台service在doJob()方法中连接服务器并向主程序实时发送广播。
- /**
- *启动一个子纯种并连接服务器,接收服务器返回数据data。代码略。。。
- */
- Objectdata;//服务器返回的数据data
- Intentintent=newIntent();//创建Intent对象
- intent.setAction("com.justel.service");
- intent.putExtra("data",data);
- sendBroadcast(intent);//发送广播
至此,我们实现了主程序通过接收广播实时更新应用的UI界面。
更多相关文章
- Android四大基本组件介绍与生命周期
- Android(安卓)bluetooth介绍(四): a2dp connect流程分析
- 第三章 Android程序设计基础
- Android(安卓)开发中的倒计时
- Android(安卓)开机自启动程序
- Android电量和插拔电源状态广播监听
- Android发送短信方法实例详解
- Android中ListView中Item的设置
- Android(安卓)系统广播Action一览验证