zygote&AsyncTask的doInBackgroud方法

zygote

有时候会遇到报有关zygote的错,这是个什么东西呢,简单理解就是孵化池。

当每个新的进程启动虚拟机的一个新的实例时,如果每次都加载所有必要的基类,则效率会很低。android把每个应用放在独立的进程中,他会利用底层linux操作系统的fork操作,通过模板进程生成新的进程,该进程在启动新的虚拟机实例时能够达到最优状态,该模板进程的名字就是zygote。zygote模板进程是dalvik虚拟机的一个实例,它包含一组预加载类及zygote进程的其他方法,这些进程通过fork操作生成zygote的副本。

AsyncTask适合运行历时非产短的任务,比如几秒钟,不适合历时数分钟或者更长的进程。因为生成任务的aty有生命周期,如果产生AsyncTask后接了个电话,可能会发现aty已被销毁

AsyncTask的doInBackgroud方法,因为他是在另一个线程执行的,只能引用作用域内的变量,这样才是线程安全的,下面是个错误的用法:

//.... some class
int mCount;
public void initButton1(Button button){
mCount = 0;
button.setOnClickListener(){
@SuppressWarnings("unchecked")
@override
public void onClick(View v){
@override
protected void doInBackground(Void...args){
mCount++;//!!!!not thread safe
return null;
}
}.execute();
}
});
}

android ui是单线程的

为了保证ui的及时响应,耗时超过几毫秒或者需要好几百条指令的任务都不应该在主线程操作。

AsyncTask运行任务简单,但是doInBackground是在另一个线程。不能写任何其他线程可见的状态,也不能读任何其他线程可写的状态。这也包括其参数。

不可改变的对象是在并发线程之间传递信息的重要工具。

时间: 2024-10-14 05:47:24

zygote&AsyncTask的doInBackgroud方法的相关文章

ListView动态加载数据分页(使用Handler+线程和AsyncTask两种方法)

ListView动态加载数据分页(使用Handler+线程和AsyncTask两种方法)

Android 结合实例学会AsyncTask的使用方法

AsyncTask运行时经过四个步骤,运行四个方法: 1.onPreExecute(),执行在UI线程,能够设置或改动UI控件,如显示一个进度条 2.doInBackground,执行在后台线程,不能够设置或改动UI控件,该方法的执行时机是: onPreExecute()运行完成马上调用该方法,在方法中进行耗时操作,能够在该方法中调用publishProgress方法 来公布当运行的进度,调用publishProgress方法后就会马上触发onProgressUpdate方法 3.onProgr

AsyncTask的使用方法和理解

.对于耗时的操作,我们的一般方法是开启“子线程”.如果需要更新UI,则需要使用handler 2.如果耗时的操作太多,那么我们需要开启太多的子线程,这就会给系统带来巨大的负担,随之也会带来性能方面的问题.在这种情况下我们就可以考虑使用类AsyncTask来异步执行任务,不需要子线程和handler,就可以完成异步操作和刷新UI. 3.AsyncTask:对线程间的通讯做了包装,是后台线程和UI线程可以简易通讯:后台线程执行异步任务,将result告知UI线程. 4.使用方法:共分为两步,自定义A

调用AsyncTask的excute方法不能立即执行程序的原因分析及改善方案

LinkedBlockingQueue<Runnable> blockingQueue = new LinkedBlockingQueue<Runnable>(); ExecutorService exec = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, blockingQueue); new MyFileToBitmap(viewHold.ivPhone, archice.getFilePath()).execu

Android线程与线程池

一.特殊的线程 1.AsynTask 底层用到了线程池,封装了线程池和Handler,主要是为了方便开发者在子线程中更新UI 2.IntentService(不完整???) 内部采用HandlerThread来执行任务,当任务执行完毕后IntentService会自动退出,底层直接使用了线程(从任务执行的角度来看,IntentService的作用很像一个后台线程,但是IntentService是一种服务,他不容易被系统杀死从而可以尽量保证任务的执行) 3.HandlerThread 是一种具有消

Android AsyncTask详解

(写在前面:文章是看了慕课上的教程之后写的,感谢http://www.imooc.com/learn/377) 一.AsyncTask基本结构介绍 首先,顾名思义,AsyncTask是异步任务. 为什么要异步任务? 因为只有UI线程,即主线程可以对控件进行更新操作.好处是保证UI稳定性,避免多线程对UI同时操作. 同时要把耗时任务放在非主线程中执行,否则会造成阻塞,抛出无响应异常. AsyncTask是安卓封装好的异步机制.(当然也可以自己写new thread,handler) AsyncTa

源码分析--AsyncTask

查看文档 AsyncTask enables proper and easy use of the UI thread. This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers. AsyncTask使适当的和易用的用户界面线程.这个类允许执行后台操作,在UI线程上发布的结果

Android中AsyncTask使用具体解释

在Android中我们能够通过Thread+Handler实现多线程通信.一种经典的使用场景是:在新线程中进行耗时操作.当任务完毕后通过Handler向主线程发送Message.这样主线程的Handler在收到该Message之后就能够进行更新UI的操作.上述场景中须要分别在Thread和Handler中编写代码逻辑,为了使得代码更加统一,我们能够使用AsyncTask类. AsyncTask是Android提供的一个助手类,它对Thread和Handler进行了封装,方便我们使用. Andro

AsyncTask使用注意事项

AsyncTask是android自带的一个异步处理线程 它带了很多参数 都很方便使用 但是有一些注意事项 1: 官网说明: AsyncTasks should ideally be used for short operations (a few seconds at the most.) If you need to keep threads running for long periods of time, it is highly recommended you use the vari