투케이2K

125. (AndroidStudio/android/java) 바인딩 서비스 (bindService) 사용해 모바일 내부 클라이언트 및 서버 백그라운드 작업 실시 본문

Android

125. (AndroidStudio/android/java) 바인딩 서비스 (bindService) 사용해 모바일 내부 클라이언트 및 서버 백그라운드 작업 실시

투케이2K 2021. 4. 28. 18:44
반응형

/* =========================== */

[ 개발 환경 설정 ]

개발 툴 : AndroidStudio

개발 언어 : java

/* =========================== */

/* =========================== */

[소스 코드]

[AndroidManifest.xml 파일]

<액티비티 등록 부분>
<activity
            android:name=".A_Service"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustPan"/>



<서비스 등록 부분>
<service
            android:name=".A_ServiceReceiver"
            android:enabled="true"
            android:exported="true"
            android:stopWithTask="false" />

[JAVA 파일 : A_Service]

    //========== [서비스 등록 부분] ==========
    public void setServiceStart(){
        Log.d("---","---");
        Log.w("//===========//","================================================");
        Log.d("","\n"+"[A_Service > setServiceStart() 메소드 : 서비스 시작 수행]");
        Log.w("//===========//","================================================");
        Log.d("---","---");
        try {
            //TODO [일반 서비스 시작 실시]
            //startService(new Intent(getApplicationContext(), A_ServiceReceiver.class));

            //TODO [바인딩 서비스 시작 실시]
            Intent intent = new Intent(A_Service.this, A_ServiceReceiver.class);
            bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }

    //========== [서비스 해제 부분] ==========
    public void setServiceStop(){
        Log.d("---","---");
        Log.e("//===========//","================================================");
        Log.d("","\n"+"[A_Service > setServiceStop() 메소드 : 서비스 종료 수행]");
        Log.e("//===========//","================================================");
        Log.d("---","---");
        try {
            //TODO [일반 서비스 종료 실시]
            //stopService(new Intent(getApplicationContext(), A_ServiceReceiver.class));

            //TODO [바인딩 서비스 종료 실시 - 액티비티 종료 시 자동 해제됨]
            unbindService(serviceConnection);
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }

[JAVA 파일 : A_ServiceReceiver]

package kr.co.two2k.manager;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;

import java.util.Random;

public class A_ServiceReceiver extends Service {

    //TODO [서비스에서 바인딩을 사용하기 위한 변수 선언]
    IBinder mBinder = new A_Service_Binder();
    class A_Service_Binder extends Binder {
        A_ServiceReceiver getService() { // 서비스 객체를 리턴
            return A_ServiceReceiver.this;
        }
    }

    @Override //TODO [서비스가 최초 생성될 때만 호출]
    public void onCreate() {
        Log.d("---","---");
        Log.d("//===========//","================================================");
        Log.d("","\n"+"[A_ServiceReceiver > onCreate() 메소드 : 서비스 최초 생성]");
        Log.d("//===========//","================================================");
        Log.d("---","---");
    }

    @Override //TODO [startService()로 서비스를 시작할 때 호출]
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d("---","---");
        Log.w("//===========//","================================================");
        Log.d("","\n"+"[A_ServiceReceiver > onStartCommand() 메소드 : startService() 서비스 실행]");
        Log.w("//===========//","================================================");
        Log.d("---","---");
        return START_STICKY;
    }

    @Override //TODO [bindService()로 바인딩을 실행할 때 호출]
    public IBinder onBind(Intent intent) {
        Log.d("---","---");
        Log.w("//===========//","================================================");
        Log.d("","\n"+"[A_ServiceReceiver > onStartCommand() 메소드 : bindService() 바인딩 실행]");
        Log.w("//===========//","================================================");
        Log.d("---","---");
        return mBinder;
    }

    @Override //TODO [unbindService()로 바인딩을 해제할 때 호출]
    public boolean onUnbind(Intent intent) {
        Log.d("---","---");
        Log.e("//===========//","================================================");
        Log.d("","\n"+"[A_ServiceReceiver > onUnbind() 메소드 : unbindService() 바인딩 종료]");
        Log.e("//===========//","================================================");
        Log.d("---","---");
        return true;
    }

    @Override //TODO [이미 onUnbind()가 호출된 후에 bindService()로 바인딩을 실행할 때 호출]
    public void onRebind(Intent intent) {
        Log.d("---","---");
        Log.d("//===========//","================================================");
        Log.d("","\n"+"[A_ServiceReceiver > onRebind() 메소드 : bindService() 바인딩 재호출됨]");
        Log.d("//===========//","================================================");
        Log.d("---","---");
    }

    @Override //TODO [서비스가 소멸될 때 호출]
    public void onDestroy() {
        Log.d("---","---");
        Log.e("//===========//","================================================");
        Log.d("","\n"+"[A_ServiceReceiver > onDestroy() 메소드 : stopService() 서비스 종료]");
        Log.e("//===========//","================================================");
        Log.d("---","---");
    }

    //TODO [작업 처리 수행 메소드 정의 실시]
    public String getServiceJob(){
        String returnData = "";
        try {
            returnData = String.valueOf(new Random().nextInt(10)+1);
        }
        catch (Exception e){
            e.printStackTrace();
        }
        return String.valueOf(returnData);
    }

}//TODO 서비스 종료

/* =========================== */

/* =========================== */

[결과 출력]

/* =========================== */

/* =========================== */

[파일 첨부 : 전체 소스코드]

소스코드.txt
0.02MB

/* =========================== */

반응형
Comments