Android 系列 4.9使用线程创建响应式应用程序
来源:互联网 发布:网上淘宝代购店 编辑:程序博客网 时间:2024/05/17 23:19
4.9使用线程创建响应式应用程序
问题
您有一个执行长任务的应用程序,并且您不希望应用程序在这些应用程序正在进行时显示为无响应。
解
通过使用线程,您可以创建一个响应的应用程序,即使它正在处理耗时的操作。
讨论
为了使您的应用程序响应,而在Android操作系统上运行耗时的操作,您有几个选项。如果你已经知道Java,你知道你可以创建一个类来扩展Thread类,并覆盖public void run()方法,然后在该对象上调用start()方法来运行这个耗时的过程。如果你的类已经扩展了另一个类,你可以实现Runnable接口。另一种方法是创建自己的类来扩展Android的AsyncTask类,但我们将在Recipe 4.10中讨论AsyncTask。
在Java和Android的早期,我们被教导有关直接使用Thread
类。该模式编码如下:
Thread thread = new Thread(new Runnable(){//已弃用,不要使用!
public void run(){
getServerData();
}}
});
thread.start();
关于这种线程的使用有很多问题,但是最大的打击是创建线程的开销。对于除了最简单的情况之外的所有情况,现在建议使用线程池,在其一生的一半时间内都使用Java。
示例4-15显示了此类的基于池的实现。
实例4-15。联网活动实施
如你所见,当我们在onCreate()方法中启动我们的活动时,我们创建并提交一个Runnable对象。 Runnable方法run()将在我们在池上调用submit()方法后执行一段时间。从这里你可以调用另一个方法或几个其他方法和操作是耗时的,否则会阻塞主线程,使你的应用程序看起来无响应。
通常当我们完成线程时,我们得到我们想要呈现给应用程序用户的结果。如果您尝试从您启动的线程更新GUI(而不是主线程),您的应用程序将崩溃。你可以读取错误消息,看到问题实际上是一个线程而不是主UI线程你尝试改变UI在主线程。
在Handler类的帮助下,可以用这样的数据改变UI;参见配方4.11。或者,您可以使用AsyncTask来区分代码(见配方4.10)。
问题
您有一个执行长任务的应用程序,并且您不希望应用程序在这些应用程序正在进行时显示为无响应。
解
通过使用线程,您可以创建一个响应的应用程序,即使它正在处理耗时的操作。
讨论
为了使您的应用程序响应,而在Android操作系统上运行耗时的操作,您有几个选项。如果你已经知道Java,你知道你可以创建一个类来扩展Thread类,并覆盖public void run()方法,然后在该对象上调用start()方法来运行这个耗时的过程。如果你的类已经扩展了另一个类,你可以实现Runnable接口。另一种方法是创建自己的类来扩展Android的AsyncTask类,但我们将在Recipe 4.10中讨论AsyncTask。
在Java和Android的早期,我们被教导有关直接使用Thread
类。该模式编码如下:
Thread thread = new Thread(new Runnable(){//已弃用,不要使用!
public void run(){
getServerData();
}}
});
thread.start();
关于这种线程的使用有很多问题,但是最大的打击是创建线程的开销。对于除了最简单的情况之外的所有情况,现在建议使用线程池,在其一生的一半时间内都使用Java。
示例4-15显示了此类的基于池的实现。
实例4-15。联网活动实施
public class NetworkConnection extends Activity {ExecutorService pool = Executors.newSingleThreadExecutor();/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);pool.submit(new Runnable(){public void run() {getServerData();}});}}
如你所见,当我们在onCreate()方法中启动我们的活动时,我们创建并提交一个Runnable对象。 Runnable方法run()将在我们在池上调用submit()方法后执行一段时间。从这里你可以调用另一个方法或几个其他方法和操作是耗时的,否则会阻塞主线程,使你的应用程序看起来无响应。
通常当我们完成线程时,我们得到我们想要呈现给应用程序用户的结果。如果您尝试从您启动的线程更新GUI(而不是主线程),您的应用程序将崩溃。你可以读取错误消息,看到问题实际上是一个线程而不是主UI线程你尝试改变UI在主线程。
在Handler类的帮助下,可以用这样的数据改变UI;参见配方4.11。或者,您可以使用AsyncTask来区分代码(见配方4.10)。
0 0
- Android 系列 4.9使用线程创建响应式应用程序
- 使用 jQuery Deferred 和 Promise 创建响应式应用程序
- 使用jQuery Deferred 和 Promise 创建响应式应用程序
- 使用 jQuery Deferred 和 Promise 创建响应式应用程序
- Android 系列 1.6使用Apache Maven创建“Hello,World”应用程序
- 如何使用Firebase创建Android聊天应用程序
- Android 系列 1.5从命令行创建“Hello,World”应用程序
- Smart Client学习笔记(7) 使用多线程创建高响应智能客户端应用程序
- 【翻译】使用Ext JS设计响应式应用程序
- 在Android中使用HandlerThread创建线程
- 在Android中使用HandlerThread创建线程
- 在Android中使用HandlerThread创建线程
- android使用handlerthread创建线程示例
- 在Android中使用HandlerThread创建线程
- android使用handlerthread创建线程示例
- 在Android中使用HandlerThread创建线程
- 在Android中使用HandlerThread创建线程
- VS2003 C#:重写键盘响应事件、动态创建控件、创建线程、在线程中使用委托在界面显示数据
- mybatis 批量insert返回主键列表
- App 后台架构设计方案 设计思想与最佳实践
- ListView嵌入ScrollView中出现的问题及解决方法
- 论前后台如何实现web中文件下载功能
- 弹窗组件
- Android 系列 4.9使用线程创建响应式应用程序
- ORB-SLAM: a Versatile and Accurate Monocular SLAM System
- 80 leetcode - Subsets II
- Android Studio多渠道打包
- 关于微信小程序正式上线的那些事儿
- 蓝桥杯入门训练
- iOS调试_Couldn't load project
- 第一次写博客
- JAVA 学习 【I/O 基础】