如果运行时,可以看到滚动条由条慢慢变短,则说明程序成功了。截图如下,建议选择大点的文件做测试。

main.xml

xmlns:Android="http://schemas.android.com/apk/res/android"

android:layout_height="wrap_content" android:id="@+id/scrollView1" android:layout_width="fill_parent">

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

android:id="@+id/tv"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

FileRead.java

public class FileRead {

boolean readend=false;

List al=null;

public  class ReadNodesThread extends Thread{//读取线程

public void run()

{

al=new ArrayList(100);

al.clear();

readend=false;

int i=0;

try {

RandomAccessFile raf=new RandomAccessFile("/sdcard/test.txt","r");

//try {

while(raf.getFilePointer()

{

al.add(raf.readLine());

//sleep(100);//如果测试文件太小,这里休眠是为了测试,

}

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

readend=true;

}

};

}

MultiThreadActivity.java

public class MultiThreadActivity extends Activity {

FileRead fr=null;

Handler mHandler=null;

int curi=0;

Runnable updateui=null;

String[] tmp=null;

String s="";

TextView tv=null;

class ReadListener extends Thread{//监听线程,当数据更新数目大于10条时,更新UI

public void run()

{

int i=0,newi=0;

while(!fr.readend)

{

newi=fr.al.size();

if((newi-i)>10)//新增数据大于10条,更新UI

{

i=newi;

tmp=(String[])fr.al.toArray(new String[fr.al.size()]);

mHandler.post(updateui);

try {

Thread.sleep(100);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

//数据读完了

tmp=(String[])fr.al.toArray(new String[fr.al.size()]);

mHandler.post(updateui);

try {

Thread.sleep(100);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

};

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

tv=(TextView)findViewById(R.id.tv);

fr=new FileRead();

ReadNodesThread readThread=fr.new ReadNodesThread();

updateui=new Runnable()//更新UI的线程

{

@Override

public void run() {

// TODO Auto-generated method stub

int i=0;

for(i=curi;i

{

s+=tmp[i]+"\n";

}

tv.setText(s);

curi=i;

}};

readThread.start();

ReadListener updateThread=new ReadListener();

mHandler=new Handler();

updateThread.start();

}

}

linux安卓主线程同步,Android解决:使用多线程和Handler同步更新UI相关推荐

  1. 麻辣烫与安卓主线程工作原理

    文章目录 前言 一碗麻辣烫 Active Object 设计模式 Active Object Active Object 模式的优势 安卓主线程工作原理 总结 参考文章 前言 首先,我们先去点一碗麻辣 ...

  2. android 主线程调用,Android 主线程和线程之间相互发送消息

    通过分析Activity源码,我们知道每个Activity都有一个Looper,所以主线程在接收Message是不需要调用Looper.prepare()和Looper.loop(),但是线程是不带L ...

  3. linux安卓手机文件夹,Android系统的手机文件夹目录详解

    一.文件夹 1./acct/ 系统回收站,删除的系统文件. 2./cache/ 缓存 3./data/ 用户的所有程序相关数据 app/ 所有用户安装的apk文件 app-private/ data/ ...

  4. android handler同步,android解决:使用多线程和Handler同步更新UI

    如果运行时,可以看到滚动条由条慢慢变短,则说明程序成功了.截图如下,建议选择大点的文件做测试. main.xml xmlns:android="http://schemas.android. ...

  5. Android下的多线程下Handler的使用

    在Android下面也有多线程的概念,在C/C++中,子线程可以是一个函数,一般都是一个带有循环的函数,来处理某些数据,优先线程只是一个复杂的运算过程,所以可能不需要while循环,运算完成,函数结束 ...

  6. java数据同步处理_Java如何处理多线程的数据同步问题

    在这里写这种文章好奇怪,先用作笔记吧 Java中有如下的方法来处理代码块的并发访问问题: 一是关键字synchronized 二是加锁(锁对象,条件对象) Java给每一个对象都提供了一个内部锁,在方 ...

  7. android 动态文本选取,android-用动态文本更新UI

    我会使用处理程序. private static final int WHAT = 1; private static final int TIME_TO_WAIT = 5000; Handler r ...

  8. Android Handler主线程和一般线程通信的应用分析

    Handler的定义:主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进 ...

  9. Handler-接受子线程数据更新UI主线程;非主线程通信--HandlerThread

    一.定义 主要接受子线程发送的数据, 并用此数据配合主线程更新UI.           解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI ...

最新文章

  1. 俄罗斯自研Elbrus CPU参数曝光,CEO年近九旬仍未退休
  2. 刘启成_使用if及变量编写LAMP管理脚本
  3. 贼好用的 Java 工具类库,GitHub 星标 10k+,你在用吗?
  4. 北邮OJ 980. 16校赛-R_clover's Challenge
  5. 视频专辑:Hibernate 视频
  6. Yaf框架视频教程之入门篇【已完成】
  7. Java 算法 最大体积
  8. lua 差值 日期_Lua获取系统时间和时间格式化方法及格式化参数
  9. javascript 未来新方法的介绍
  10. python画素描画_画画了,画画了,几行Python就成一幅素描画
  11. html5+前端脸部识别采集,前端人脸识别框架Tracking.js
  12. JAVA小项目--商品管理系统
  13. GB/T 28448-2019 《信息安全技术 网络安全等级保护测评要求》之安全通信网络测评解读
  14. 微信公众号迁移公证办理流程
  15. TF卡和SD卡的区别
  16. dedeCMS采集插件自动采集文章自定义接口
  17. 单片机八灯交替闪烁c语言代码,单片机闪烁灯汇编语言源代码大全(四款闪烁灯的汇编语言源代码)...
  18. oracle招聘ocp认证,OracleOCP认证要通过哪些考试?
  19. 游戏脚本开发思路总结
  20. 三菱FX系列DPLSY指令使用

热门文章

  1. [转]C#多线程学习(三) 生产者和消费者
  2. C++ 模板中定义友元
  3. "unable to load dynamic library"错误的解决方法
  4. QQ2009任务栏的QQ图标怎么隐藏
  5. 推荐一个 React 技术揭秘的项目,自顶向下的 React 源码分析
  6. Ubuntu18.04安装Scala
  7. linux 批量kill java进程
  8. jvm字节码和基于jvm的多语言混合编程
  9. Maven修改本地仓库位置
  10. 在IntelliJ IDEA里创建Spring Boot项目