没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
4页
为什么我们需要IntentService ? Android中的IntentService是继承自Service类的,在我们讨论IntentService之前,我们先想一下Service的特点: Service的回调方法(onCreate、onStartCommand、onBind、onDestroy)都是运行在主线程中的。当我们通过startService启动Service之后,我们就需要在Service的onStartCommand方法中写代码完成工作,但是onStartCommand是运行在主线程中的,如果我们需要在此处完成一些网络请求或IO等耗时操作,这样就会阻塞主线程UI无响应,从而
资源详情
资源评论
资源推荐
详解详解Android中中IntentService的使用方法的使用方法
为什么我们需要为什么我们需要IntentService ?
Android中的IntentService是继承自Service类的,在我们讨论IntentService之前,我们先想一下Service的特点: Service的回调方法(onCreate、onStartCommand、onBind、
onDestroy)都是运行在主线程中的。当我们通过startService启动Service之后,我们就需要在Service的onStartCommand方法中写代码完成工作,但是onStartCommand是
运行在主线程中的,如果我们需要在此处完成一些网络请求或IO等耗时操作,这样就会阻塞主线程UI无响应,从而出现ANR现象。为了解决这种问题,最好的办法就是在
onStartCommand中创建一个新的线程,并把耗时代码放到这个新线程中执行。可以参考之前的文章《《Android通过通过startService实现文件批量下载》实现文件批量下载》,这篇文章在
onStartCommand中开启了新的线程作为工作线程去执行网络请求,所以这样不会阻塞主线程。由此看来,创建一个带有工作线程的Service是一种很常见的需求(因为工作
线程不会阻塞主线程),所以Android为了简化开发带有工作线程的Service,Android额外开发了一个类——–IntentService。
IntentService的特点的特点
IntentService具有以下特点:
1. IntentService自带一个工作线程,当我们的Service需要做一些可能会阻塞主线程的工作的时候可以考虑使用IntentService。
2. 我们需要将要做的实际工作放入到IntentService的onHandleIntent回到方法中,当我们通过startService(intent)启动了IntentService之后,最终Android Framework会回调
其onHandleIntent方法,并将intent传入该方法,这样我们就可以根据intent去做实际工作,并且onHandleIntent运行在IntentService所持有的工作线程中,而非主线程。
3. 当我们通过startService多次启动了IntentService,这会产生多个job,由于IntentService只持有一个工作线程,所以每次onHandleIntent只能处理一个job。面多多个
job,IntentService会如何处理?处理方式是one-by-one,也就是一个一个按照先后顺序处理,先将intent1传入onHandleIntent,让其完成job1,然后将intent2传入
onHandleIntent,让其完成job2…这样直至所有job完成,所以我们IntentService不能并行的执行多个job,只能一个一个的按照先后顺序完成,当所有job完成的时候
IntentService就销毁了,会执行onDestroy回调方法。
如何使用如何使用IntentService ??
在《《Android通过通过startService实现文件批量下载》实现文件批量下载》一文中,我们演示了如何通过Service批量下载文章,现在在本文中我们还是要演示如何批量下载文章,只不过是用
IntentService完成这项工作。
系统界面如下:
界面很简单,就一个按钮“批量下载文章”,通过该Activity上的按钮启动DownloadService。
代码如下:
package com.ispring.startservicedemo;
import android.app.IntentService;
import android.content.Intent;
import android.util.Log;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class DownloadIntentService extends IntentService {
public DownloadIntentService(){
super("Download");
Log.i("DemoLog", "DownloadIntentService构造函数, Thread: " + Thread.currentThread().getName());
}
@Override
public void onCreate() {
super.onCreate();
Log.i("DemoLog", "DownloadIntentService -> onCreate, Thread: " + Thread.currentThread().getName());
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("DemoLog", "DownloadIntentService -> onStartCommand, Thread: " + Thread.currentThread().getName() + " , startId: " + startId);
return super.onStartCommand(intent, flags, startId);
}
weixin_38693753
- 粉丝: 8
- 资源: 995
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0