티스토리 뷰
안드로이드에서의 서비스는 백그라운드에서 실행되는 프로세스를 의미한다.
액티비티와는 다르게 화면이 존재하지 않지만, 역시 액티비티처럼 AndroidManifest.xml파일에 등록해줘야 하며, 액티비티 상에서 이 서비스를 시작하고 싶을 경우에는 startService()메서드를 이용해서 시작시킬 수 있다.
서비스를 도중에 중지하고 싶을 때는 stopService()메서드를 호출하면 된다.
서비스는 Service클래스를 상속 받아서 구현하면 된다.
public class BlankService extends Service { public void onCreate(){ super.onCreate(); } @Override public IBinder onBind(Intent intent) { throw new UnsupportedOperationException("Not yet implemented"); } }
onCreate() 메서드가 있는데 처음 서비스를 시작하면 호출되는 메서드이다. 액티비티 클래스와는 다르게 메서드의 Bundle매개변수가 없다. 이유는 서비스는 참조할 디자인 xml파일이 없기 때문이다.
서비스는 다른 안드로이드 구성요소와의 연결을 위해 onBind()메서드를 제공한다.
<application> ..................... <service android:name=".BlankService" android:enabled="true" ></service> ..................... </application>
서비스 클래스를 만들었다면 이 서비스를 등록해줘야한다. 액티비티를 생성하면 AndroidManifest.xml에 등록해줬던 것처럼 서비스도 이곳에 등록을 해야한다. 위는 서비스를 등록하는 xml 코드이다.
다음은 서비스를 구현해본 코드이다. 카운트 세기 버튼을 누르면 디버깅 콘솔에 문자열이 찍히고, 카운트 종료 버튼을 누르면 카운트 세는 것을 중단한다.
서비스 클래스 (CountService.java)
public class CountService extends Service implements Runnable { static int count = 0; int flag = 0; public CountService() { } @Override public void onCreate() { super.onCreate(); Thread t = new Thread(this); t.start(); } @Override public void onDestroy() { super.onDestroy(); flag = 1; } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } @Override public void run() { try { for(int i = 0 ; i<=100; i++) { if(flag == 1){ count = 0; break; } Thread.sleep(1000); ++count; Log.d("CountService", "현재 카운트 >> " + count); } }catch (Exception e){ e.printStackTrace(); } } }
액티비티 클래스 (ServiceActivity.java)
public class ServiceActivity extends AppCompatActivity { Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_service); intent = new Intent(this, CountService.class); } public void onServiceStart(View v){ startService(intent); } public void onStopService(View v){ stopService(intent); } }
ServiceActivity의 디자인 xml 파일 (activity_service.xml)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.choonie.flagactivity.ServiceActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:onClick="onServiceStart" android:text="서비스시작" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:onClick="onStopService" android:text="서비스종료" /> </LinearLayout>
'Android > 정리' 카테고리의 다른 글
알림 대화상자 띄우기 (0) | 2016.05.28 |
---|---|
애플리케이션 실행 시 권한 부여 (0) | 2016.05.26 |
수명주기 테스트 코딩 그리고 SharedPreferences인터페이스 (0) | 2016.05.24 |
액티비티 라이프사이클(수명주기) (0) | 2016.05.17 |
액티비티가 쌓이는 스택과 플래그 (0) | 2016.05.12 |