안드로이드 ~ 서비스

Service는 Activity(UI)로 모든 계산이나 정보 처리를 하지 않고, Service Class나 다른 서버로 처리하는 것. 또한 Service는 배경으로 운행하고 있으며, 자체에 UI가 없습니다.

≪IntentService≫



① 서비스 클래스 만들기



java class의 폴더→new→service→service(Intent), 어떤 서비스에서도 생성자는 반드시 만듭니다. 이번에는 Service를 만들고 싶었을 뿐이므로 내용은 적당히 Log i를 제시했을뿐입니다.

MyIntentService.java

public class MyIntentService extends IntentService {

    private static final String TAG = "MyIntentService";


    public MyIntentService() {
        //build constructor is a must
        super("MyIntentService");
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        //This is what service does.

        Log.i(TAG, "onHandleIntent: MyIntentService is running");


    }
}

② <서비스> 태그 추가



AndroidManifest.xml

 <service android:name=".MyIntentService"/>

③ MainActivity에서 Service를 집행한다



MainActivity.java
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent=new Intent(this, MyIntentService.class);
        startService(intent);}

그렇다면 앱을 집행하면 아래의 Log 정보를 볼 수 있습니다.



≪Service≫



①Service Class 만들기



Java Class 폴더→New→Service→Service
Bound service는 여기에서 만들 생각이 없었기 때문에, 우선 onBind method는 null을 return합니다. 다음은 onStartCommand와 onDestroy를 Override합니다. Service에는 Thread가 내장되어 있지 않기 때문에 스스로 onStartCommand 안에서 만듭니다. Runnable과 Thread의 내용은 적절하게 로그 정보를 조작합니다. 마지막으로 Service.START_STICKY;를 반환합니다.

MyService.java
public class MyService extends Service {
    public MyService() {
    }

    private static final String TAG = "MyService";

    @Override
    public IBinder onBind(Intent intent) {
        //we do no bound service here
       return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        //what you want this service to do
        Log.i(TAG, "The service is running");

        //Creating thread is needed for Service(no need for IntentService)
        Runnable r=new Runnable() {
            @Override
            public void run() {
                for (int i=0;i<5;i++){
                    long futureTime=System.currentTimeMillis()+5000;
                    while(System.currentTimeMillis()<futureTime){
                        synchronized (this){
                        try{
                            wait(futureTime-System.currentTimeMillis());
                            Log.i(TAG, "run: The service is processing");
                        } catch (Exception e){}}
                    }
                }
            }

        };

        Thread mThread=new Thread(r);
        mThread.start();

        // when service is stopped accidentally,restart the service again
        return Service.START_STICKY;
    }

    @Override
    public void onDestroy() {
        //what action when the service is stopped.
        Log.i(TAG, "The service is stopped");
   }

②Service Class를 MainActivity로 집행합니다.



MainActivity.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent intent=new Intent(this, MyService.class);
        startService(intent);
    }

앱을 실행하면 배경의 로그는 다음과 같습니다.


이상은 각서입니다. Bound Service를 사용하는 방법을 알면 여기에서 추가로 기록합니다.

좋은 웹페이지 즐겨찾기