activity-使用动态文本更新 UI出现的问题

问题描述

使用动态文本更新 UI出现的问题

我想每5秒钟更新一次屏幕上的文本,就创建了一个 timer 计时器来实现。但是只有第一次更新了,以后再没更新。是不是我需要刷新视图或者使用别的方法?

public class HomeActivity extends Activity implements OnClickListener {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textTitle = (TextView) findViewById(R.id.textTitle);
        textArtist = (TextView) findViewById(R.id.textArtist);
        timedMeta();
}
static void timedMeta()
{
    timer.scheduleAtFixedRate(
        new TimerTask() {
            public void run() {
                try{
                    textTitle.setText(title);
                    textArtist.setText(artist);
                    }
                Thread.sleep(UPDATE_INTERVAL);
                catch (Exception e)
                {
                },
                DELAY_INTERVAL,
                UPDATE_INTERVAL);
           }
       }
   )
}

解决方案

要使用一个 Handler.

private static final int WHAT = 1;
private static final int TIME_TO_WAIT = 5000;

Handler regularHandler = new Handler(new Handler.Callback() {
    public boolean handleMessage(Message msg) {
        // Do stuff

        regularHandler.sendEmptyMessageDelayed(msg.what, TIME_TO_WAIT);

        return true;
    }
});

regularHandler.sendEmptyMessageDelayed(WHAT, TIME_TO_WAIT);

onPause()

regularHandler.removeMessages(WHAT)

解决方案二:

你可以在activity中开一个线程,里面放个while循环,线程每sleep5秒就通过handler更新一次UI,记住,不能在activity的子线程中更新UI,否则会报错

时间: 2024-11-03 06:01:09

activity-使用动态文本更新 UI出现的问题的相关文章

在Android中实现Service动态更新UI界面(Service与主程序Activity之间的数据交互或控制)

案例:通过service向远程服务器发送请求,根据服务器返回的结果动态更新主程序UI界面,主程序可实时关闭或重启服务. 方案一:使用广播+Service 注册BroadcastReceiver 1.在主程序activity中注册一个BroadcastReceiver,用于接收Service发布的广播. @Override protected void onStart() {//重写onStart方法 dataReceiver = new DataReceiver(); IntentFilter

ui-Android 更新UI 耗时问题

问题描述 Android 更新UI 耗时问题 假如现在我得到了某个List,里面有1000个字符串,然后我想我在主线程中按下某个Button之后,把它们都动态地加载到UI上来,完全是用代码动态添加的布局,然后执行的时候发现有点耗时. 现在有两个问题: 1.有没有什么机制可以让它加载地更快,因为发现更新UI的语句只能在主线程执行,但是耗时的本身就是这些语句 2.如果一定得耗时,我想在加载的时候显示一个progressDialog,更新UI语句全在主线程一个foreach()循环里,我在foreac

Android更新UI的四种方法详解_Android

前言 相信每位Android开发者们都知道更新UI只能在主线程中进行,若是在子线程执行任务后需要更新UI,则需要借助handler跳转到主线程中.以下介绍几种操作UI的方法. 一.使用Handler的handleMessage() Handler的构造 public Handler() { this(null, false); } public Handler(Callback callback, boolean async) { if (FIND_POTENTIAL_LEAKS) { fina

使用AsyncTask异步更新UI界面及原理分析

概述: AsyncTask是在Android SDK 1.5之后推出的一个方便编写后台线程与UI线程交互的辅助类.AsyncTask的内部实现是一个线程池,所有提交的异步任务都会在这个线程池中的工作线程内执行,当工作线程需要跟UI线程交互时,工作线程会通过向在UI线程创建的Handler传递消息的方式,调用相关的回调函数,从而实现UI界面的更新.AsyncTask抽象出后台线程运行的五个状态,分别是:1.准备运行,2.正在后台运行,3.进度更新,4.完成后台任务,5.取消任务,对于这五个阶段,A

android 下载 跨界面更新UI

问题描述 android 下载 跨界面更新UI 项目遇到问题,在一个activity中点击下载一堆文件,然后需要在另一个activity中的fragment中的listview中更新正在下载的item的进度. 我是使用广播加异步更新.但总觉得效率有点慢.有更好的方法吗?

为大家解决动态文本的特效显示与文件大小之间的矛盾

动态|解决|特效|显示 在论坛,笔者会不时见到一些人问关于动态文本的问题,其中问得最多的是动态文本的透明,旋转与遮罩等特效,以及嵌入字符后文件变大等问题.为了让更多的人能够更好地使用动态文本,以及避免论坛里重复出现类似的帖子,笔者下定决心,写一个针对上述问题的动态文本使用教程.说明:1 二楼主要讨论文本显示的原理问题,理论性比较强,如果读者只是为了解决问题,做出需要的效果的话,二楼的内容可以跳过.2 三楼主要提出问题的解决方案,包括显示,以及避免文件变大的问题.3 要在显示和文件大小这对矛盾处理

android中子线程更新UI的方式

一.为何写作此文 你是不是经常看到很多书籍中说:不能在子线程中操作ui,不然会报错.你是不是也遇到了如下的疑惑(见下面的代码): (Bundle savedInstanceState) { .onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); Thread.currentThread().setName(); LooperThrea

android更新UI的几种方法

作为IT新手,总以为只要有时间,有精力,什么东西都能做出来.这种念头我也有过,但很快就熄灭了, 因为现实是残酷的,就算一开始的时间和精力非常充足,也会随着项目的推进而逐步消磨殆尽.我们会发现, 自己越来越消极怠工,只是在无意义的敲代码,敲的还是网上抄来的代码,如果不行,继续找. 这就 是项目进度没有规划好而导致的. 最近在做有关蓝牙的项目,一开始的进度都安排得很顺利,但是因 为测试需要两部手机,而且还要是android手机,暑假已经开始了,同学们都回家了,加上我手机的蓝牙坏了 ,导致我的进度严重

Android 在其他线程中更新UI线程的解决方法_Android

方法一:Activity.runOnUiThread(Runnable )(经验之道: 这个最好用, 凡是要刷新页面的地方,Activity.runOnUiThread( new Runnable()  { public void run(){更新UI}}); 方法二:子线程调用Handler的sendMessage(message)发送事件. 复制代码 代码如下: mHandler = new Handler() {     @Override     public void handleMe