package bit.java39.servicetest;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.widget.Toast;
public class NewsService extends Service {
boolean mQuit;
// Service life cycle
// startService called => onCreate called => onStartCommand / onBind =>
// onDestory
@Override
public void onCreate() {
super.onCreate();
}
// -intent : 클라이언트가 서비스를 시작할 때 전달한 인텐트
// -flags : 서비스의 요청에 대한 추가 정보
// -startID : 서비스 요청에 대한 고유 식별번호. 차후 stopSelfResult 메서드로 서비스가
// 스스로 종료할 때 식별자로 이용한다.
// -return value : 서비스의 동작모드를 지정하는데 주로 접착식과 비접착식 둘 중 하나를 리턴한다.
// 접착식은 시작과 종료가 명시적이고 비접착식은 명령을 처리하는 동안만 실행된다는 점이 다르며 프로세스가
// 강제종료 될 때 재시작 여부가 다르다.
// -서비스는 프로세스의 메인스레드에서 실행되므로 너무 오래 시간을 끌거나 블로킹해서는 안된다.
// 즉시 리턴해야 하므로 오래 걸리는 작업이나 지속적으로 해야 할 작업은 반드시 스레드로 분리해야한다.
// 데몬(Unix 용어:일반적으로 생각하는 백그라운드 서비스)의 경우는 지속적으로 실행되어야 하므로
// 스레드를 생성하여 실행시키는 것이 보통이다.
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
mQuit = false;
NewsThread thread = new NewsThread(this, mHandler);
thread.start();
// START_STICKY : START_STICKY 형태로 호출된 Service 는
// null Intent 가 담긴 onStartCommand() 콜백 함수가 호출된다.
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Service End", Toast.LENGTH_SHORT).show();
mQuit = true;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
class NewsThread extends Thread {
NewsService mParent;
Handler mHandler;
String[] arrNews = { "신창근", "이현진", "최준석", "임정현", "박용성", "김홍준" };
public NewsThread(NewsService parent, Handler handler) {
mParent = parent;
mHandler = handler;
}
public void run() {
for (int i = 0; mQuit == false; i++) {
Message msg = new Message();
msg.what = 0;
msg.obj = arrNews[i % arrNews.length];
mHandler.sendMessage(msg);
try { Thread.sleep(5000); } catch (Exception e) {}
}
}
}
Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 0) {
String news = (String) msg.obj;
Toast.makeText(NewsService.this, news, Toast.LENGTH_SHORT).show();
}
}
};
}
2013년 7월 14일 일요일
Android의 서비스를 이해해보자 (2)Service class
2.Service
-------------------------------------------------------------------------------------------------------------------------
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기