package com.ghg.MyIntentService;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
/**
* IntentService类的精简版,在(main线程)activity启动下载服务类,把需要下载的资源路径传给service,在service中,
* 创建handler对象和消息对象,工作进程,然后通过handler对象把消息发送到和handler绑定的消息队列中(工作线程中),下载任务,
* 下载结束后,把本次的启动的service关闭;
* @author gaohong
*
*/
public class MyIntentService extends Service {
HandlerThread thread;
Handler handler;
/**
* 初始化工作线程和handler
*/
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
thread=new HandlerThread("workThread");
System.out.println("在"+Thread.currentThread().getName()+"线程中创建工作线程");
thread.start();
Looper looper=thread.getLooper();
handler=new Handler(looper){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
System.out.println("在"+Thread.currentThread().getName()+"中处理消息");
onHandleIntent((Intent)msg.obj);
stopSelf(msg.arg1);//下载结束后把该次的调用service结束
}
};
}
protected void onHandleIntent(Intent intent) {
// TODO Auto-generated method stub
String uri=intent.getStringExtra("uri");
try {
thread.sleep(3000);//相当于下载任务;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 创建消息,用handler发送
*
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Message msg=Message.obtain();
msg.obj=intent;
msg.arg1=startId;
System.out.println("在"+Thread.currentThread().getName()+"线程中发送消息");
handler.sendMessage(msg);
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
thread.quit();
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
activity中的代码:
package com.ghg.MyIntentService;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class Day1305_MyIntentServiceActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent=new Intent(this, MyIntentService.class);
intent.putExtra("uri", "http://192.168.1.162:8080/musiconline/musics/001.mp3");
startService(intent);
}
}