Android本地文件异步加载方式的实…

如果我们需要在Android中界面中加载文本,如果文本稍大,这个过程就会很耗时,一旦超过一个系统规定的时间,就会提示无响应,所以我们采用子线程来实现加载文本,然后送到主线程中。

首先我们定义这样一个类,来进行文件的读:

    public class ReadFileThread implements Runnable {

public boolean readfinish = false;
 public List list = null;

public void run() {
  list = new ArrayList(); // 初始化list集合
  list.clear(); // 清空list中的内容
  readfinish = false;

  try {
   File file = new File("/sdcard/sanguo.txt");
   RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
   while (randomAccessFile.getFilePointer() < randomAccessFile
     .length()) {
    // 将读取到的字符串使用iso8859-1编码格式转化为字节,在使用utf-8编码格式转化成字符串
    String s = new String(randomAccessFile.readLine().getBytes(
      "iso8859-1"), "utf-8");
    // 将字符串添加到list中
    list.add(s);
     }
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  readfinish = true;
 }

}

在MainActivity中,我们定义一个内部类:

class ReadListener extends Thread {
  @Override
  public void run() {
   super.run();
   int i = 0, newi = 0;
   while (!readFileThread.readfinish) {
    newi = readFileThread.list.size();//list的长度
    //当读取的文件超过十行时,通知ui更新
    if (newi - i > 10) {
     temp = readFileThread.list
       .toArray(new String[readFileThread.list.size()]);
     handler.post(runnable);
    }
   }
   //当数据读取完毕后,发送更新请求
   temp = readFileThread.list.toArray(new String[readFileThread.list
     .size()]);
   handler.post(runnable);
  }
 }

在onStart方法中,实现:

 protected void onStart() {
  super.onStart();
  //启动读线程
  Thread thread=new Thread(readFileThread);
  thread.start();
  ReadListener listener=new ReadListener();
  listener.start();
  //更新ui线程
  runnable = new Runnable() {
   @Override
   public void run() {
    int i = 0;
    //得到的字符串组合并成字符串
    for (i = curi; i < temp.length; i++) {
     s += temp[i] + "\n";

    }
    tv.setText(s);
    curi = i;
   }
  };
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值