zoukankan      html  css  js  c++  java
  • Android之Service与IntentService的比较

    稍微翻译理一理,这里主要是说IntentService使用队列的方式将请求的Intent加入队列,然后开启一个worker thread(线程)来处理队列中的Intent,对于异步的startService请求,IntentService会处理完成一个之后再处理第二个,每一个请求都会在一个单独的worker thread中处理,不会阻塞应用程序的主线程,这里就给我们提供了一个思路,如果有耗时的操作与其在Service里面开启新线程还不如使用IntentService来处理耗时操作。下面给一个小例子:

     

    1.Service:

     
    1. package com.zhf.service;  
    2.   
    3. import Android.app.Service;  
    4. import Android.content.Intent;  
    5. import Android.os.IBinder;  
    6.   
    7. public class MyService extends Service {  
    8.   
    9.     @Override  
    10.     public void onCreate() {  
    11.         super.onCreate();  
    12.     }  
    13.       
    14.     @Override  
    15.     public void onStart(Intent intent, int startId) {  
    16.         super.onStart(intent, startId);  
    17.         //经测试,Service里面是不能进行耗时的操作的,必须要手动开启一个工作线程来处理耗时操作   
    18.         System.out.println("onStart");  
    19.         try {  
    20.             Thread.sleep(20000);  
    21.         } catch (InterruptedException e) {  
    22.             e.printStackTrace();  
    23.         }  
    24.         System.out.println("睡眠结束");  
    25.     }  
    26.       
    27.     @Override  
    28.     public IBinder onBind(Intent intent) {  
    29.         return null;  
    30.     }  
    31. }  

    2.IntentService:

     
    1. package com.zhf.service;  
    2.   
    3. import Android.app.IntentService;  
    4. import Android.content.Intent;  
    5.   
    6. public class MyIntentService extends IntentService {  
    7.   
    8.     public MyIntentService() {  
    9.         super("yyyyyyyyyyy");  
    10.     }  
    11.   
    12.     @Override  
    13.     protected void onHandleIntent(Intent intent) {  
    14.         // 经测试,IntentService里面是可以进行耗时的操作的   
    15.         //IntentService使用队列的方式将请求的Intent加入队列,然后开启一个worker thread(线程)来处理队列中的Intent   
    16.         //对于异步的startService请求,IntentService会处理完成一个之后再处理第二个   
    17.         System.out.println("onStart");  
    18.         try {  
    19.             Thread.sleep(20000);  
    20.         } catch (InterruptedException e) {  
    21.             e.printStackTrace();  
    22.         }  
    23.         System.out.println("睡眠结束");  
    24.     }  
    25. }  

    测试主程序:

     
    1. package com.zhf.service;  
    2.   
    3. import Android.app.Activity;  
    4. import Android.content.Intent;  
    5. import Android.os.Bundle;  
    6.   
    7. public class ServiceDemoActivity extends Activity {  
    8.     /** Called when the activity is first created. */  
    9.     @Override  
    10.     public void onCreate(Bundle savedInstanceState) {  
    11.         super.onCreate(savedInstanceState);  
    12.         setContentView(R.layout.main);  
    13.         startService(new Intent(this,MyService.class));//主界面阻塞,最终会出现Application not responding   
    14.         //连续两次启动IntentService,会发现应用程序不会阻塞,而且最重的是第二次的请求会再第一个请求结束之后运行(这个证实了IntentService采用单独的线程每次只从队列中拿出一个请求进行处理)   
    15.         startService(new Intent(this,MyIntentService.class));  
    16.         startService(new Intent(this,MyIntentService.class));  
    17.     }  
    18. }  
  • 相关阅读:
    17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Based Replication
    17.1.2 Replication Formats
    Setting the Master Configuration on the Slave
    17.1.1.9 Introducing Additional Slaves to an Existing Replication Environment
    17.1.1.8 Setting Up Replication with Existing Data
    17.1.1.7 Setting Up Replication with New Master and Slaves
    17.1.1.6 Creating a Data Snapshot Using Raw Data Files
    列出display的值,并说明它们的作用
    CSS设置DIV居中
    CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?
  • 原文地址:https://www.cnblogs.com/wanqieddy/p/2305708.html
Copyright © 2011-2022 走看看