android之IntentService种的实现
android之IntentService类的实现
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); } }