ui-Android 更新UI 耗时问题

问题描述

Android 更新UI 耗时问题

假如现在我得到了某个List,里面有1000个字符串,然后我想我在主线程中按下某个Button之后,把它们都动态地加载到UI上来,完全是用代码动态添加的布局,然后执行的时候发现有点耗时。
现在有两个问题:
1.有没有什么机制可以让它加载地更快,因为发现更新UI的语句只能在主线程执行,但是耗时的本身就是这些语句
2.如果一定得耗时,我想在加载的时候显示一个progressDialog,更新UI语句全在主线程一个foreach()循环里,我在foreach前showDialog,在foreach后dismiss,发现似乎是没有效果,网上查到的使用方法都是子线程里发消息通知耗时操作完成了,我这种情况的话应该怎么办

解决方案

我在Activity中开了一个后台线程,负责获取数据,每个10秒通过Handler通知Activity的TextView显示(setText())。

问题是当我按back键的时候,Activity会finish掉。再次启动时,依然能或得到线程发来的数据,但是却无法更新UI(setText()不更新)。如果按home键则没有问题,因为Activity不会finish掉。

请高手指教啊!!......
答案就在这里:android 关于更新UI的问题

解决方案二:

主线程里面不能放置耗时的程序,必须开子线程,通过handler告知主线程更新

解决方案三:

开子线程执行耗时操作

解决方案四:

你开一个AsyncTask异步任务,主要复写三个接口,onPre... doinBackground, onPost...
这三个除了中间的一个是在子线程里运行,其余都是在ui线程,你只要在onPre...那里显示进度条,然后在doinback...里处理费时操作,然后在onpost...里取消显示进度条并更新ui就行

解决方案五:

UIThread里不能有耗时操作,必须开Thread

时间: 2024-10-26 08:14:23

ui-Android 更新UI 耗时问题的相关文章

android更新UI的几种方法

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

线程-关于android更新ui的问题

问题描述 关于android更新ui的问题 为什么setClickable可以 在线程中修改ui而setEnable和setVisibilty不能在线程中使用. 解决方案 因为后面两个会引起UI重绘,所以不能再非UI线程调用 例如setVisibilty,会使控件显示出来,这时需要重绘 关注我的专栏http://blog.csdn.net/crazy__chen谢谢 解决方案二: android widget UI 更新问题的一个样例如何利用Handler更新android的UI关于Androi

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

Android 更新UI的方法汇总_Android

1.Activity的 runOnUiThread textView = (TextView) findViewById( R.id.tv ); new Thread(new Runnable() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { textView.setText( "更新UI了"); } }); } }).start(); andro

Android 更新UI的方法汇总

1.Activity的 runOnUiThread textView = (TextView) findViewById( R.id.tv ); new Thread(new Runnable() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { textView.setText( "更新UI了"); } }); } }).start(); andro

学习通过Thread+Handler实现非UI线程更新UI组件(转)

  [Android线程机制]    出于性能考虑,Android的UI操作并不是线程安全的,这就意味着如果有多个线程并发操作UI组件,可能导致线程安全问题.为了解决这个问题,Android制定了一条简单的规则:只允许UI线程修改Activity里的UI组件    当一个程序第一次启动时,Android会同时启动一条主线程(Main Thread),主线程主要负责处理与UI相关的事件,如用户的按键事件,用户接触屏幕的事件及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理.所以主线程通常又被叫

Android 更新UI的几种方式

1.Activity的 runOnUiThread    textView = (TextView) findViewById( R.id.tv ); new Thread(new Runnable() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { textView.setText( "更新UI了"); } }); } }).start(); an

Android异步更新UI的四种方式_Android

大家都知道由于性能要求,android要求只能在UI线程中更新UI,要想在其他线程中更新UI,大致有4种方式,下面分别使用四种方式来更新一个TextView.1.使用Handler消息传递机制 package com.example.runonuithreadtest; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.widget.TextView;

android中子线程更新UI的方式

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