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)
댓글 없음:
댓글 쓰기