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的主要内容,如果未能解决你的问题,请参考以下文章

Android之四大组件六大布局五大存储

Android基础之四大组件---Activity

Android安卓四大组件之Activity

android 四大组件之---Service

Android四大组件之service

Android四大组件之BroadcastReceiver详细解析