您的位置:首页 > 其它

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

2014-05-01 16:00 288 查看
执行耗时操作的服务对界面会阻塞界面的操作。新开的线程在服务关闭后还会执行,造成了

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

1.继承IntentService:

/**
 * @author linwb
 */
public class LeanIntentService extends IntentService {
	
	public LeanIntentService(){
		super("");
	}
	
	@Override
	public void onCreate() {
		super.onCreate();
		Log.v("LeanLog", "onCreate PID= "+Process.myTid());
		
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		Log.v("LeanLog", "onStartCommand PID= "+Process.myTid());
		return super.onStartCommand(intent, flags, startId);
	}

	@Override
	protected 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()中执行耗时操作即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: