Android怎么实现把子线程接收到的实时数据传送给UI界面并用textview显示

问题描述

Android怎么实现把子线程接收到的实时数据传送给UI界面并用textview显示 40C
Android蓝牙模块接受到的输入流要显示在程序中另一个Activit中,并且实时更新数据,哪位大神help一下啊

解决方案

你可以百度一下EventBus这个工具,如果有不懂的可以问我。

解决方案二:
在Android中规定只有UI thread可以更新界面,但是我们开发中会经常遇到一些耗时的操作,这些操作可能会很花费时间,最终的结果却要更新到UI上
这种情况下,如果我们将这个操作放到UI thread中做就很可等挡住UI线程,从而导致ANR Application Not Responding,因此我们都会new一个工作
线程,在这个线程中做复杂的耗时操作,待得到结果后,再将结果更新到UI。
子线程获取数据,更新UI的方法大概有这样几种:
1、通过AsyncTask+progressbar的方法,在AsyncTask的doInBackground()中做耗时的操作,在onProgressUpdate(Progress…) 中更新UI(进度条)
此方法在主线程执行,用于显示任务执行的进度。onPostExecute(Result) 相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回。
2、通过Handler的方法,从子线程中发消息Msg,在Handler中处理该消息(在UI thread中执行),并updateUI。
3、如果你的界面是listView的形式,不妨用listAdapter绑定数据库,在子线程接收到实时数据跟新到provider中,然后触发listView的自动更新。

解决方案三:
用handler处理一下就行了。

解决方案四:
每个界面都有自己的UI线程

解决方案五:
在子线程中使用Handler发送消息,在HanDler中处理UI的更新

解决方案六:
建议你去看一下handler的知识,还有UI线程与非UI线程的关系。
《Android疯狂讲义》 李刚的书 可以自己看一下这一部分的章节。

解决方案七:
你的问题主有有两个:
1、子线程去UI操作怎么做:
这点上面都有回答了,总之就一个诀窍,一定要放在主线程操作UI就行,可用Handler,view.post()AsyncTask等等都可以;

2、不同Activity之间如何消息传递:
这个,我建议你了解一些监听器的实现原理,或者看看监听者模式,你在ActivityA去监听ActivityB即可,主要是回调。EventBus的实现原理也是如此的,如果你自己不想写,就用EventBus这个框架,不过我建议你还是自己写

解决方案八:
你可以看看这个例子

package com.example.mrwang.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

import java.util.Timer;
import java.util.TimerTask;
/**

  • Created by MrWang on 2015/8/8.
    */
    public class Start extends Activity{

    ProgressBar pgBar;
    TextView tvShow;
    Button btnStart;
    int progress=0;
    Timer timer;
    Handler handler;
    TimerTask timerTask;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.start);

    pgBar=(ProgressBar)findViewById(R.id.pg);tvShow=(TextView)findViewById(R.id.tvShow);btnStart=(Button)findViewById(R.id.btStart);timer=new Timer();handler =new Handler() {    @Override    public void handleMessage(Message msg) {        switch (msg.what){            case 0x001:                pgBar.setVisibility(View.VISIBLE);                pgBar.setProgress(progress);                tvShow.setVisibility(View.VISIBLE);                break;            case 0x002:                pgBar.setVisibility(View.INVISIBLE);                tvShow.setText(""加载完成"");                timerTask.cancel();                timer.cancel();                break;        }    }};timerTask =new TimerTask() {    @Override    public void run() {        if(progress<100){            progress++;            handler.sendEmptyMessage(0x001);        }else{            handler.sendEmptyMessage(0x002);        }    }};pgBar.setVisibility(View.INVISIBLE);tvShow.setVisibility(View.INVISIBLE);btnStart.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        timer.schedule(timerTask//你要完成的工作                100//每隔多长时间触发一次        );        btnStart.setEnabled(false);    }});

    }
    }

解决方案九:
最简单的方法是使用handler,在类里定义一个handler变量,例如:Hanler handler=new Hanler(){
public void HanleMessage(Message msg){// 函数名不能变
switch(msg.what){//msg.what一般传递线程里需要界面操作执行的操作
Bundle bundle=new Bundler();
bunle=msg.getData();从传过来的message数据中取出传过来的绑定数据的bundle对象
String str=bundle.getString(""string"");//从bundle中取出数据
text.setText(str);//具体操作
}
}
};

在接收线程里使用handle变量(该例子是把数据text传递到可以操作布局的handler里)
String text=""text"";
Message message=new Message();
Bundle bunle=new Bundle();
bundle.putString(text);
message.setData(bundle);
handler.sendMessage(message);

这样就可以把线程里的string数据传递到handler里了,handler就可以进行布局的操作

解决方案十:
最简单的方法是使用handler,在类里定义一个handler变量,例如:Hanler handler=new Hanler(){
public void HanleMessage(Message msg){// 函数名不能变
switch(msg.what){//msg.what一般传递线程里需要界面操作执行的操作
Bundle bundle=new Bundler();
bunle=msg.getData();从传过来的message数据中取出传过来的绑定数据的bundle对象
String str=bundle.getString(""string"");//从bundle中取出数据
text.setText(str);//具体操作
}
}
};

在接收线程里使用handle变量(该例子是把数据text传递到可以操作布局的handler里)
String text=""text"";
Message message=new Message();
Bundle bunle=new Bundle();
bundle.putString(text);
message.setData(bundle);
handler.sendMessage(message);

这样就可以把线程里的string数据传递到handler里了,handler就可以进行布局的操作

时间: 2024-07-31 07:36:58

Android怎么实现把子线程接收到的实时数据传送给UI界面并用textview显示的相关文章

【Android开发】用户界面设计-使用XML和Java代码混合控制UI界面

效果图: res/layout/main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="fill_parent"

Android开发之子线程操作UI的几种方法_Android

 在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法: 在看方法之前需要了解一下Android中的消息机制. 方法1 Activity.runOnUiThread 方法如下: runOnUiThread(new Runnable() { @Override public void run() { tv.setText("Hello"); } }); 这种方法简单易用,如果当前线程是UI线程,那么行动是立即执行.如

Android开发之子线程操作UI的几种方法

在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法: 在看方法之前需要了解一下Android中的消息机制. 方法1 Activity.runOnUiThread 方法如下: runOnUiThread(new Runnable() { @Override public void run() { tv.setText("Hello"); } }); 这种方法简单易用,如果当前线程是UI线程,那么行动是立即执行.如果

Android 调试不进线程

问题描述 Android 调试不进线程 /** * 获取服务器图片路径 */ public void getinfo() { new Thread(){ public void run() { try { URL url=new URL(constants.GUIDEIMG); HttpURLConnection conn=(HttpURLConnection) url.openConnection(); //设置必要的参数信息 conn.setConnectTimeout(5000); con

Android实现在子线程中更新Activity中UI的方法_Android

本文实例讲述了Android实现在子线程中更新Activity中UI的方法.分享给大家供大家参考,具体如下: 在Android平台下,进行多线程编程时,经常需要在主线程之外的一个单独的线程中进行某些处理,然后更新用户界面显示.但是,在主线线程之外的线程中直接更新页面显示的问题是:系统会报这个异常: ERROR/AndroidRuntime(1222): android.view.ViewRoot$CalledFromWrongThreadException: Only the original

activity传数据-新手学Android的广播,为什么接收不到广播数据,急急急急

问题描述 新手学Android的广播,为什么接收不到广播数据,急急急急 我是动态注册的 ,代码如下: public class LoginActivity extends Activity implements OnClickListener{ public static String ACTION= "ok"; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { s

android 图片上传 服务器接收图片方法代码

问题描述 android 图片上传 服务器接收图片方法代码 求android 批量图片上传 服务器接收,代码,最好有详细解释,万分感谢jackcathy369@163.com 解决方案 http://programmerguru.com/android-tutorial/how-to-upload-image-to-java-server/......答案就在这里:Android 上传图片,服务器接收图片实现 解决方案二: http://blog.csdn.net/y150481863/arti

消息接收-Android消息推送与接收

问题描述 Android消息推送与接收 亲们,问一个问题.就是,有两个应用程序分别装在两个手机上,如何实现其中一端呼叫,另一端会有反应.而且另一端时刻准备着接受前一端的呼叫.这是用什么实现的? 解决方案 socket通讯,可以通过一台公共服务器中转,如果你想用消息推送,可以用腾讯信鸽或百度推送,做一个后台推送服务,一个手机需要告知另一个时,调用一下后台发送接口,另一个收到后,处理 解决方案二: 建议楼主看一下MQTT,这个开源的项目,应该可以实现楼主的需求.

Android 中通过实现线程更新Progressdialog (对话进度条)_Android

作为开发者我们需要经常站在用户角度考虑问题,比如在应用商城下载软件时,当用户点击下载按钮,则会有下载进度提示页面出现,现在我们通过线程休眠的方式模拟下载进度更新的演示,如图(这里为了截图方便设置对话进度条位于屏幕上方): layout界面代码(仅部署一个按钮): <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.androi