在Android中实现Service动态更新UI界面(Service与主程序Activity之间的数据交互或控制)
来源:互联网 发布:淘宝女装店店铺简介 编辑:程序博客网 时间:2024/05/16 08:03
转载自:http://blog.csdn.net/catoop/article/details/7566845
案例:通过service向远程服务器发送请求,根据服务器返回的结果动态更新主程序UI界面,主程序可实时关闭或重启服务。
方案一:使用广播+Service注册BroadcastReceiver
1、在主程序activity中注册一个BroadcastReceiver,用于接收Service发布的广播。
- @Override
- protected void onStart() {//重写onStart方法
- dataReceiver = new DataReceiver();
- IntentFilter filter = new IntentFilter();//创建IntentFilter对象
- filter.addAction("com.xiaoshan.app");
- registerReceiver(dataReceiver, filter);//注册Broadcast Receiver
- super.onStart();
- }
2、在Service中注册一个BroadcastReceiver,用于接收主程序发布的广播。
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {//重写onStartCommand方法 <pre name="code" class="java"> cmdReceiver = new CmdReceiver();
- IntentFilter filter = new IntentFilter();//创建IntentFilter对象
- filter.addAction("com.xiaoshan.service");
- registerReceiver(cmdReceiver, filter);//注册Broadcast Receiver
- return super.onStartCommand(intent, flags, startId);
- } </pre>
- <pre></pre>
- <p></p>
- <pre></pre>
- <p></p>
- <h2><a name="t2"></a>发送广播</h2>
- <p>1、主程序发布广播,Service接收读取数据。</p>
- <p>如:主程序activity可发布广播,用于向后台service传递数据或控制信息,如停止service命令。</p>
- <p></p>
- <pre name="code" class="java"> btnStop.setOnClickListener(new OnClickListener() {//为按钮添加点击事件监听
- @Override
- public void onClick(View v) {//重写onClick方法
- Intent myIntent = new Intent();//创建Intent对象
- myIntent.setAction("com.xiaoshan.service");
- myIntent.putExtra("cmd", CMD_STOP_SERVICE);
- sendBroadcast(myIntent);//发送广播
- }
- }); </pre><br>
- 2、Service发布广播,主程序Activity接收更新UI。
- <p></p>
- <p>如:Service后台读取网络数据,用于向Activity传递数据或控制界面信息,更新UI。</p>
- <p></p>
- <pre name="code" class="java">//连接服务器读取数据(略)
- Object data;//服务器返回的数据data
- Intent intent = new Intent();//创建Intent对象
- intent.setAction("com.xiaoshan.app");
- intent.putExtra("data", data);
- sendBroadcast(intent);//发送广播 </pre>
- <p></p>
- <p><br>
- </p>
- <p>如上实现双向广播注册和接收来实现Service和主程序Activity之间的数据交互或控制。<br>
- <br>
- </p>
- <p></p>
- <h2><a name="t3"></a><span style="font-size:32px">
- 方案二:使用Handler</span><br>
- </h2>
- 1、在主程序的Activity中声明一个static变量handler,里面写好回调函数
- <p></p>
- <p></p><pre name="code" class="java"> TextView tv = ……;//这里省略
- public static Handler handler = new Handler(new Callback() {
- @Override
- public boolean handleMessage(Message msg) {
- tv.setText(msg.getData().getString("content"));
- return false;
- }
- });</pre>2、在Service里面,调用这个handler,传输数据。<p></p>
- <p></p><pre name="code" class="java"> Message msg = MyActivity.handler.obtainMessage();
- Bundle data = new Bundle();
- data.putString("content",content);
- msg.setData(data);
- msg.sendToTarget();</pre><br>
- <br>
- <p></p>
- <p><br>
- </p>
- <p><br>
- </p>
- <br>
- <br>
- <pre></pre>
- 在Android中实现Service动态更新UI界面(Service与主程序Activity之间的数据交互或控制)
- 在Android中实现Service动态更新UI界面(Service与主程序Activity之间的数据交互或控制)
- 在Android中实现service动态更新UI界面
- 在Android中实现service动态更新UI界面
- Android中Service与Activity数据交互的简单理解
- Android Service 通知Activity更新界面的方法研究|Service通过Broadcast更新UI
- Android Service 通知Activity更新界面的方法研究|Service通过Broadcast更新UI
- Android Service 通知Activity更新界面的方法研究|Service通过Broadcast更新UI
- Android 在service 更新activity UI
- service动态更新UI界面
- Android中service动态更新UI
- 【Android】关于在Service中通过接口回调更新Activity的UI
- 关于Android中Service与Activity的信息交互
- 关于Android中Service与Activity的信息交互
- Android中Activity与Service的交互方式
- 关于Android中Service与Activity的信息交互
- android之在activity中控制另一个activity的UI更新_如何在activity之间传递handler
- android之在activity中控制另一个activity的UI更新_如何在activity之间传递handler
- 静态邻接表的简单实现
- Objective C线程 之 GCD介绍
- STL heap简单应用
- Java类型转换在函数参数中的小结
- window linux 双系统直接删除linux修复
- 在Android中实现Service动态更新UI界面(Service与主程序Activity之间的数据交互或控制)
- Android Intent 详解
- Linux SSH, WinSCP
- CodeForces Round #183 (303C) - Minimum Modular
- wchar_t*和 char*之间的转换
- linux命令-- 抓包
- selenium ide插件介绍
- tinkphp model经验
- linux下目录说明