package com.test;
import android.app.Service;
import android.os.IBinder;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.Process;
import android.os.HandlerThread;
import android.content.Intent;
import android.util.Log;
public class BaseServiceImpl extends Service {
private static final String TAG = "skywang-->IntentServiceTest";
private Looper mServiceLooper;
private ServiceHandler mServiceHandler;
private class ServiceHandler extends Handler {
public ServiceHandler(Looper looper) {
super(looper);
}
// 服务的消息处理函数:将数值翻倍;然后,终止服务。
@Override
public void handleMessage(Message msg) {
Log.d(TAG, "hand msg="+msg);
doubleNumber(msg.arg2);
stopSelf();
}
}
// 将数字的值x2
private synchronized void doubleNumber(int val) {
int num = val * 2;
Log.d(TAG, "num="+num);
}
@Override
public void onCreate() {
Log.d(TAG, "on create");
// 新建一个线程来运行服务,线程的优先级是10
HandlerThread thread = new HandlerThread("BaseServiceImpl",
Process.THREAD_PRIORITY_BACKGROUND);
// 在使用HandlerThread的getLooper()方法之前,必须先调用该类的start()开启线程
thread.start();
// 获取线程对应的looper
mServiceLooper = thread.getLooper();
// 新建handler来处理looper中的消息
mServiceHandler = new ServiceHandler(mServiceLooper);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "start command: intent="+intent);
// 获取一个消息对象msg
Message msg = mServiceHandler.obtainMessage();
// 设置msg的arg1和arg2(都为int类型)
msg.arg1 = startId;
msg.arg2 = intent.getIntExtra("number", 0);
// 将消息发送到消息队列,系统会自动调用handleMessage进行消息处理。
mServiceHandler.sendMessage(msg);
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
Log.d(TAG, "on bind");
return null;
}
@Override
public void onDestroy() {
Log.d(TAG, "on destroy");
}
}
评论9
最新资源