案例:通过service向远程服务器发送请求,根据服务器返回的结果动态更新主程序UI界面,主程序可实时关闭或重启服务。
注册BroadcastReceiver
在主程序activity中注册一个BroadcastReceiver,用于接收Service发布的广播。
- @Override
- protected void onStart() {
- dataReceiver = new DataReceiver();
- IntentFilter filter = new IntentFilter();
- filter.addAction("com.justel.serviceBC");
- registerReceiver(dataReceiver, filter);
- super.onStart();
- }
停止service命令
主程序activity可发布广播,用于向后台service传递数据或控制信息,如停止service命令。
- btnStop.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent myIntent = new Intent();
- myIntent.setAction("com.justel.service");
- myIntent.putExtra("cmd", CMD_STOP_SERVICE);
- sendBroadcast(myIntent);
- }
- });
接收广播
后台service注册BroadCastReceiver用于接受主程序发送的广播
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- IntentFilter filter = new IntentFilter();
- filter.addAction("com.justel.service");
- registerReceiver(cmdReceiver, filter);
- doJob();
- return super.onStartCommand(intent, flags, startId);
- }
实时发送
后台service在doJob()方法中连接服务器并向主程序实时发送广播。
- Object data;
- Intent intent = new Intent();
- intent.setAction("com.justel.service");
- intent.putExtra("data", data);
- sendBroadcast(intent);
android中实现service动态更新UI界面
原文:http://www.cnblogs.com/wust221/p/5414776.html