android后台任务处理

当应用启动时,系统会自动为应用分配一个main Thread。也就是我们常说的UI线程,是为了处理组件绘制和组件分发。为了保证UI线程不被阻塞,保证组件不停止分发和绘制,android规定Ui线程阻塞5秒就会出现ANR。所以我们要开启新的线程进行处理后台任务。

进程的优先级分为五种,分别是:前台进程,可见进程,后台进程,服务进程,空进程。

1.Thread  ---One shot tasks   //短暂任务
new Thread(){
			@Override
			public void run() {
				//do short task
			}
		};

2.Executor  //执行多个线程任务
  (1).自动分配线程池 线程数量
private ExecutorService mExecutorService = Executors.newCachedThreadPool();
 (2).手动分配 线程池 线程数量
private ExecutorService mExecutorService = Executors.newFixedThreadPool(5);
 (3).单线程池
private ExecutorService mExecutorService = Executors.newSingleThreadExecutor();




加入线程池:
mExecutorService.execute(new Runnable(){

			@Override
			public void run() {
				//do task
				
			}
		});


3.Handler和Thread //用于处于UI交互
private Handler mHandler = new Handler(){
		public void handleMessage(Message msg) {
			//update UI 
		}
	};
new Thread(){
			@Override
			public void run() {
				mHandler.obtainMessage().sendToTarget();
			}
		};


4.AsyncTask //处理比较长时间的后台任务
class MyAsyncTask extends AsyncTask<Void, Void, Void>{

		@Override
		protected Void doInBackground(Void... params) {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		protected void onPostExecute(Void result) {
			// TODO Auto-generated method stub
			super.onPostExecute(result);
		}
		
	}

5.Service
     为什么要用Service而不是Thread?
    线程是运行在进程里的,一旦应用被关闭了,也就是说这个进程变成了空进程,那么就很容易被系统回收,如此我们将不能及时获取到最新的消息了。

6.IntentService
     相当开启线程的service。

7.AsyncQueryHandler

8.Loader


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值