android其他线程向ui线程发送数据
来源:互联网 发布:mac 网页开发工具 编辑:程序博客网 时间:2024/05/17 08:34
先说说具体情况,我是在写音乐播放器的时候想到这个问题的,音乐播放器返回主界面后再次进入的时候会出现seekbar跳动现象,这是因为,ui线程之前得到的seekbar.progress的值是一个,再次进入后,playservice发送过来的却过了一段时间了,所以会有跳动现象(当然还遇到了其他问题,这个后面再说)
所以就想到了:
其他线程向ui线程发送数据,ui线程接受数据
这个的实现方式,一般用的都是handler message,一个线程或timer不断发送消息,ui不断接受消息,
这个我试了试,在程序退出后,timer还在发送消息,handler还在处理消息
还有一种方式,就是用receiver接受并处理消息(广播),这个就没有上面的方法好了,这个在程序退出的时候如果不unregistreceiver 就会报错,如果添加unregisreceiver,那么就不会继续接受广播,当然两种都未能继续接受广播,
所以,只有handler方法可以达到目标,可惜我在音乐播放器中用的是第二种,有空得改掉才行
::其他方法暂时还没能想到
package com.droidstouc.handler.test;import java.util.Timer;import java.util.TimerTask;import android.R.integer;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.widget.TextView;/**按退出键后,new timer.schedule不断在后台运行,handler不断接受数据, * onpause onstop ondestroy 都被调用,但是timer还在后台运行,handler也在后台接受数据 * * 用receiver接受数据,如果不再onpause中注销receiver,会报错, ( Are you missing a call to unregisterReceiver()?) * 不论注销不注销,程序退出后,receiver都无法再接受数据 * * */public class TwoActivity extends Activity {TextView tView;int num;Handler myHandler = new Handler(){public void handleMessage(android.os.Message msg) {tView.setText(""+msg.obj); System.out.println("msg"+msg.obj);};};MyReceiver myReceiver;public static final String TEST="test";@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);tView = new TextView(this);tView.setText("begin?");setContentView(tView);myReceiver = new MyReceiver();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(TEST);registerReceiver(myReceiver, intentFilter);new Timer().schedule(new TimerTask() {@Overridepublic void run() {// TODO Auto-generated method stub System.out.println("timer.."); //发送messgae给handlerMessage msg = new Message();msg.obj = num++;myHandler.sendMessage(msg);//发送广播给receiverIntent intent = new Intent(TEST);intent.putExtra("obj", num);sendBroadcast(intent);}},2000, 200);}private class MyReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubint broadcastMsg=intent.getIntExtra("obj", 0);System.out.println("my receiver is ==------num: "+broadcastMsg);}}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();Log.e("TAG","onPause..");myReceiver = null;}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();Log.e("TAG","onStop..");}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.e("TAG","onDestroy..");}}
0 0
- android其他线程向ui线程发送数据
- Android:子线程向UI主线程发送消息
- 主线程向子线程发送数据
- Android 怎样在其他线程中更新UI 线程
- Android 在其他线程中更新UI 线程
- android在其他线程中访问UI线程的方法
- android 在其他线程中更新UI线程的解决方法
- Android 在其他线程中更新UI线程的解决方法
- Android 在其他线程中更新UI线程的解决方法
- Android 在其他线程中更新UI线程的解决方法
- 向线程发送消息
- 向线程发送消息
- 向线程发送消息
- Looper,handler类实现其他线程接收UI线程发送的消息
- 在其他线程中访问UI线程
- 2 单用户client向单线程服务器不停地发送数据
- Code Fragment-Android在其他线程可以使用方法在UI线程执行UI相关
- Android中通过其他线程更新主线程UI
- 如何设置系统托盘图标
- 蓝桥杯中一个最短路径问题
- 设计模式1--工厂模式--Java实现
- 计算比较字符串出现的次数
- 解析Android Widget设计与开发(1)
- android其他线程向ui线程发送数据
- javacard开发环境搭建 Eclipse+jcop+jcdk 配置完成的开发环境
- [读书笔记]javascript编程艺术——美术馆案例(一)
- Android Audio getAudioSessionId
- QML类型说明-Label
- 解析Android Widget设计指南学习入门
- Libcurl上传图片
- 我的编程学习日志(12)--求最大公约数,最小公倍数
- 利用Shared Preferences 保存用户名密码 的方法