展会信息港展会大全

使用多线程和Handler同步更新UI
来源:互联网   发布日期:2016-01-13 22:07:42   浏览:4373次  

导读:如果运行时,可以看到滚动条由条慢慢变短,则说明程序成功了。截图如下,建议选择大点的文件做测试。[图片]1.jpg[图片]2.jpg[代码]main.xml布局文件01?xmlversion=1.0encoding=utf-8?02ScrollView03xmlns......

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

[图片] 1.jpg

[图片] 2.jpg

[代码] main.xml布局文件

01

<?xml version="1.0" encoding="utf-8"?>

02

<ScrollView

03

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

04

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

05

<LinearLayout Android:id="@+id/linearLayout1"

06

Android:orientation="vertical"

07

Android:layout_width="fill_parent"

08

Android:layout_height="wrap_content">

09

<TextView

10

Android:id="@+id/tv"

11

Android:layout_width="fill_parent"

12

Android:layout_height="wrap_content"

13

/>

14

</LinearLayout>

15

</ScrollView>

[代码] FileRead.java

01

public class FileRead {

02

boolean readend=false;

03

List<String> al=null;

04

publicclass ReadNodesThread extends Thread{//读取线程

05

06

public void run()

07

{

08

al=new ArrayList<String>(100);

09

al.clear();

10

readend=false;

11

int i=0;

12

try {

13

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

14

//try {

15

while(raf.getFilePointer()<raf.length())

16

{

17

al.add(raf.readLine());

18

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

19

}

20

21

} catch (Exception e1) {

22

// TODO Auto-generated catch block

23

e1.printStackTrace();

24

}

25

readend=true;

26

}

27

};

28

}

[代码] MultiThreadActivity.java

01

public class MultiThreadActivity extends Activity {

02

FileRead fr=null;

03

Handler mHandler=null;

04

int curi=0;

05

Runnable updateui=null;

06

String[] tmp=null;

07

String s="";

08

TextView tv=null;

09

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

10

11

public void run()

12

{

13

int i=0,newi=0;

14

while(!fr.readend)

15

{

16

newi=fr.al.size();

17

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

18

{

19

i=newi;

20

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

21

mHandler.post(updateui);

22

try {

23

Thread.sleep(100);

24

} catch (InterruptedException e) {

25

// TODO Auto-generated catch block

26

e.printStackTrace();

27

}

28

}

29

}

30

//数据读完了

31

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

32

mHandler.post(updateui);

33

try {

34

Thread.sleep(100);

35

} catch (InterruptedException e) {

36

// TODO Auto-generated catch block

37

e.printStackTrace();

38

}

39

}

40

};

41

@Override

42

public void onCreate(Bundle savedInstanceState) {

43

super.onCreate(savedInstanceState);

44

setContentView(R.layout.main);

45

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

46

fr=new FileRead();

47

ReadNodesThread readThread=fr.new ReadNodesThread();

48

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

49

{

50

@Override

51

public void run() {

52

// TODO Auto-generated method stub

53

54

int i=0;

55

56

for(i=curi;i<tmp.length;i++)

57

{

58

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

59

}

60

tv.setText(s);

61

curi=i;

62

}};

63

readThread.start();

64

ReadListener updateThread=new ReadListener();

65

mHandler=new Handler();

66

updateThread.start();

67

}

68

}

赞助本站

人工智能实验室
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港