Service-IntentService集成异步线程(2)

来源:互联网 发布:ubuntu wine命令 安装 编辑:程序博客网 时间:2024/06/05 15:39

执行耗时操作的服务对界面会阻塞界面的操作。新开的线程在服务关闭后还会执行,造成了

代码复杂。系统提供了IntentService来解决这个问题,即耗时操作只需要放在该类的onHandleIntent()中即可;

1.继承IntentService:

/** * @author linwb */public class LeanIntentService extends IntentService {public LeanIntentService(){super("");}@Overridepublic void onCreate() {super.onCreate();Log.v("LeanLog", "onCreate PID= "+Process.myTid());}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.v("LeanLog", "onStartCommand PID= "+Process.myTid());return super.onStartCommand(intent, flags, startId);}@Overrideprotected void onHandleIntent(Intent arg0) {Log.v("LeanLog", "onHandleIntent PID= "+Process.myTid());}}

2.在xml文件中配置

    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >                <service android:name=".LeanIntentService"></service>        <activity            android:name="com.csz.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application>

3.调用startService(Intent);

Intent mServiceIntent=new Intent(MainActivity.this,LeanIntentService.class);startService(mServiceIntent);

运行如下:


分析如下:


IntentService启动调用onCreate();该方法创建了一个HandlerThread;

执行onStartCommand()时,从线程队列中取出一条线程,并向线程发送消息,

在HandlerThread中的线程获取消息后,执行onHandleIntent。执行完后关闭Service,如下


但总的来说。用户只需要在onStartCommand()中新开一条线程执行任务或者在

onHandleIntent()中执行耗时操作即可。


0 0
原创粉丝点击