Android学习之——并发编程:AsyncTask和UI线程

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 12:40 我要评论(0)

Android的UI是单线程的,所以对于运行时间长的程序必须异步运行。实现异步任务的一个很方便的工具是AsyncTask。它完全隐藏了运行任务的线程的很多详细信息。

以一个例子来说明AsyncTask:

一个非常简单的应用中,有需要初始化游戏引擎,当加载内容时,显示一些插播广告图形。假设,我们希望在用户等待游戏启动时,显示一个动画背景(类似于Windows Phone 8)上的加载程序的等待界面。

当用户在点击启动按钮以后,会执行多个初始化。

问题:如果在UI线程中执行远程服务调用初始化时,整个UI界面无法执行任何其他操作。

解决:使用AsyncTask解决这个问题,代码如下:

private final class AsyncInitGame extends AsyncTask

{

private final View root;

private final Game game;

private final TextView message;

private final Drawable bg;

public AsyncInitGame(View root, Drawable bg, Game game, TextView msg)

{

this.root = root;

this.bg = bg;

this.game = game;

this.message = msg;

}

//run on the UI thread

//1. 当UI线程调用任务的execute方法时,会首先调用该方法,这里要做的操作时该任务能够对其本身和环境执行初始化,在这个例子中是安装等待启动的背景动画

@Override protected void onPreExecute()

{

if(0 >= mInFlight++){

root.setBackgroundResouce(R.anim.dots);

((AnimationDrawable)root.getBackground()).start();

}

}

//runs on the UI thread

//3. 当doInBackground方法完成时,就删除背景线程,再在UI线程中调用onPostExecute方法。

@Override protected void onPostExecute(String msg){

if(0 >= --mInFlight){

((AndimationDrawable)root.getBackground()).stop();

root.setBackgroundDrawable(bg);

}

message.setText(msg);

}

//runs on a background thread

//2. 在onPreExecute方法完成后AsyncTask创建新的背景线程,并发执行doInBackground方法。

@Override protected String doInBackground(String... args){

return (1 != args.length) || (null == args[0])) ? null : game.initialize(args[0]);

}

}private final class AsyncInitGame extends AsyncTask

{

private final View root;

private final Game game;

private final TextView message;

private final Drawable bg;

public AsyncInitGame(View root, Drawable bg, Game game, TextView msg)

{

this.root = root;

this.bg = bg;

this.game = game;

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...