展会信息港展会大全

android的两种异步机制
来源:互联网   发布日期:2016-01-13 22:10:20   浏览:1165次  

导读:在android中,如果涉及网络编程或者某些极耗资源的操作的时候,必然会出现操作时间久的情况如果这些都在主线程中进行,那程序将会死在那里(android有种机制,当程序持续不响应超过规定时间,会提示用户关闭此程......

在android中,如果涉及网络编程或者某些极耗资源的操作的时候,必然会出现操作时间久的情况

如果这些都在主线程中进行,那程序将会死在那里(android有种机制,当程序持续不响应超过规定时间,会提示用户关闭此程序)

所以只能使用非主线程来处理这些操作。

android提供两种异步机制:

一是使用asynctask类和使用标准线程机制

Asynctask提供一些抽象类的方法,能是用户不用创建线程的情况下管理后台操作。

它提供了一下方法:

obPreExecute() 运行于ui进程,用于进入后台操作前的操作

doInBackGround()运行后台操作

publishProgress()周期性通知UI线程有关后台操作的进度

onPostExecute() 后台操作完成后,调用此方法

非常方便的实现了一个后台进程的周期

使用一般创建线程方法:

使用此方法创建线程,如果要与主线程通信,比较麻烦,要实现消息机制:

handler message looper

通常有两种方式:

第一种:

01

//使用message

02

public class MyHandler extends Activity {

03

static final String TAG = "Handler";

04

Handler h = new Handler(){

05

public void handleMessage (Message msg)

06

{

07

switch(msg.what)

08

{

09

case HANDLER_TEST:

10

Log.d(TAG, "The handler thread id = " + Thread.currentThread().getId() + "\n");

11

break;

12

}

13

}

14

};

15

static final int HANDLER_TEST = 1;

16

/** Called when the activity is first created. */

17

@Override

18

public void onCreate(Bundle savedInstanceState) {

19

super.onCreate(savedInstanceState);

20

Log.d(TAG, "The main thread id = " + Thread.currentThread().getId() +"\n");

21

new myThread().start();

22

setContentView(R.layout.main);

23

}

24

class myThread extends Thread

25

{

26

public void run()

27

{

28

Message msg = new Message();

29

msg.what = HANDLER_TEST;

30

h.sendMessage(msg);

31

Log.d(TAG, "The worker thread id = " + Thread.currentThread().getId() + "\n");

32

}

33

}

34

}

第二种,使用handler post

1

Handler mHandler = new Handler();

2

//主线程中创建,主线程默认开启就创建Looper,这里就是默认使用了主线程的looper

3

new Thread(){

4

public void run(){

5

mHandler.post(new Runnable() {

6

public void run() {

7

//更新主线程的ui

8

}

9

}

赞助本站

人工智能实验室

相关热词: 异步 机制

相关内容
AiLab云推荐
展开

热门栏目HotCates

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