android 四大组件之ServiceIntentService
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 四大组件之ServiceIntentService相关的知识,希望对你有一定的参考价值。
IntentService : 自带线程,处理请求,但每次值处理一个线程。主要实现一个方法
onHandleIntent();
Service类的子类,它使用了工作(worker)线程来处理所有的启动请求,每次请求都会启动一个线程
如果服务不需要同时处理多个请求的话,这是最佳的选择。 所有你要做的工作就是实现onHandleIntent()
即可,它会接收每个启动请求的intent,然后就可在后台完成工作。
因为大多数started服务都不需要同时处理多个请求(这实际上是一个危险的多线程情况),
所以最佳方式也许就是用IntentService类来实现你的服务。
IntentService将执行以下步骤:
创建一个缺省的工作(worker)线程,它独立于应用程序主线程来执行所有
发送到onStartCommand()的intent。
创建一个工作队列,每次向你的onHandleIntent()传入一个intent,
这样你就永远不必担心多线程问题了。
在处理完所有的启动请求后,终止服务,因此你就永远不需调用stopSelf()了。
提供缺省的onBind()实现代码,它返回null。
提供缺省的onStartCommand()实现代码,它把intent送入工作队列,
稍后会再传给你的onHandleIntent()实现代码。
以上所有步骤将汇成一个结果:你要做的全部工作就是实现onHandleIntent()的代码,
来完成客户端提交的任务。(当然你还需要为服务提供一小段构造方法。)
第一步创建一个IntentService的子类,实现onHandleIntent() 方法
public class HelloIntentService extends IntentService{ private static final String image_path = "http://pic.xxhh.com/cons/20160513/8ce093d306da08fa.jpg"; public HelloIntentService() { super("HelloService"); } /** * IntentService从缺省的工作线程中调用本方法,并从启动服务的Intent作为参数, * 本方法返回后,IntentService将适时的终止这个服务。 */ @Override protected void onHandleIntent(Intent intent) { Log.i("tag", "onHandleIntent"); HttpClient httpClient = new DefaultHttpClient(); HttpGet httpPost = new HttpGet(image_path); try { HttpResponse response = httpClient.execute(httpPost); if( response.getStatusLine().getStatusCode() == 200) { byte[] result = EntityUtils.toByteArray(response.getEntity()); boolean flag = SDKTools.saveToSDK("ab.jpg", result); if(flag) Log.i("tag", "下载成功。。。"); } else { Log.i("tag", "下载失败==>"+response.getStatusLine().getStatusCode()); } }catch(Exception e) { e.printStackTrace(); } } }
第二步在清单文件中注册服务:
<service android:name="com.example.intentservicetest.HelloIntentService">
第三部在activity中启动服务,她是继承服务,启动方式一样
public class MainActivity extends Activity { Button btn1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn1 = (Button)findViewById(R.id.button1); btn1.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MainActivity.this, HelloIntentService.class); startService(intent); } }); } }
以上是关于android 四大组件之ServiceIntentService的主要内容,如果未能解决你的问题,请参考以下文章