티스토리 뷰

안드로이드에서의 서비스백그라운드에서 실행되는 프로세스를 의미한다.

액티비티와는 다르게 화면이 존재하지 않지만, 역시 액티비티처럼 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>





Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday