안드로이드에서 서비스 안의 방법의 호출, 오픈, 귀속【입문】

4206 단어 android
요즈음 시간이 좀 있으면 원래 공부할 때 했던 필기를 봤는데 오래 보지 않으면 잊어버릴 것 같아서 제가 생각했던 것들을 모두 제 블로그에 올리려고 합니다. 그러면 한편으로는 제가 예전의 지식을 잘 복습할 수 있고 다른 한편으로는 여러분과 함께 공부할 수 있습니다. 잘못된 점이 있으면모두가 지적하여 함께 진보할 수 있다.
왜 new Service () 를 통해 서비스의 방법을 호출할 수 없습니까?
서비스는 시스템 new에서 나온 것입니다. 시스템 new가 나온 후에 상하문이 왜 준비되는지 저희가 직접 new로 가는 서비스와 시스템 new의 서비스는 같은 대상이 아니기 때문에 상하문을 가져올 수 없습니다.
어떤 방식으로 서비스의 방법을 호출합니까
Android에서 서비스를 호출하는 방법을 제공하는 해결 방안은 서비스의 에이전트를 얻는 것이다
서비스 프록시 반환
서비스는 onBind () 방법으로 에이전트를 되돌려줍니다. 그 되돌려주는 값은 Ibinder의 실현 클래스입니다.
@Override
public IBinder onBind(Intent intent) {
    System.out.println("      ,   IBinder    ");
    return new MyBinder();
}
Ibinder의 실현 클래스를 만듭니다. Ibinder는 하나의 인터페이스입니다. 이 인터페이스를 실현하려면 안에 있는 모든 방법을 실현해야 하기 때문에 매우 불편합니다. 시스템은 우리에게 편리한 실현 클래스 Binder를 제공했습니다. 이 클래스가 Binder를 계승하도록 하면 우리는 에이전트 방법을 제공할 수 있습니다
public class MyBinder extends Binder{

    public void callMethodInService(String name){
        methodInService(name);
    }

}
귀속 서비스는 그 에이전트를 얻고 서비스의 방법을 호출합니다
public class MainActivity extends Activity {

    //   
    private MyBinder myBinder;

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

    //         
    public void bind(View view){
        //2.      Service
        Intent intent = new Intent(this,TestService.class);

        //1.   Service
        //intent      Service
        //conn     ,   conn        
        //BIND_AUTO_CREATE       ,        .
        bindService(intent, new MyConn(), BIND_AUTO_CREATE);
    }

    //3.       
    private class MyConn implements ServiceConnection{

        //                
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //4.      ,          
            myBinder = (MyBinder) service;
        }

        //               .
        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    }

    //              
    public void call(View view){
        //5.          ,        
        myBinder.callMethodInService("   ", 250);
    }
}

귀속 서비스 호출 서비스 방법의 절차
서비스 코드 작성
public IBinder onBind(Intent intent) {}
서비스 내부에서 대리인 대상 MyBinder
                        
를 정의onbind 방법에서 대리인 대상 되돌리기Activity 코드에서 귀속된 방식으로 서비스에 연결
bindService(intent, new MyConn(),  BIND_AUTO_CREATE);
서비스 Connection의 실현 클래스에 서비스가 되돌아오는 대리인 대상
public void onServiceConnected(ComponentName name, IBinder service)
을 얻는 방법이 있다강제 유형 변환 Ibinder에서 MyBinder 유형으로 변환
myBinder = (MyBinder) service;
대리인 대상을 호출하는 방법--서비스 안의 방법을 간접적으로 호출했다.
인터페이스를 통해 코드 내부에서 이루어진 세부 사항을 숨기다
코드의 디자인 방식을 배웁니다. 만약에 내부 유형에 여러 가지 방법이 있다면 그 중의 일부만을 폭로하고 싶을 때 인터페이스를 통해 노출하고 싶은 방법을 폭로할 수 있습니다.
내부 클래스를public로 설정하면 모든 방법이 노출되고 내부 클래스를private로 설정하면 모든 방법을 다른 사람이 사용할 수 없습니다구체적인 실현 방식: 내부 클래스를private로 설정하고 노출하고자 하는 방법을 공공 인터페이스에 추출귀속 방식으로 서비스의 생명 주기를 시작합니다
귀속 방식으로 서비스 오픈: 서비스가 존재하지 않으면 onCreate()--->onBind()를 실행하고 onStart()와 onStartCommand() 방법을 실행하지 않습니다바인딩 해제 서비스: onUnbind () --->onDetroy () 여러 번 귀속 서비스: 서비스는 한 번만 생성되고,onCreate() 방법은 한 번만 실행되며,onBind() 방법도 한 번만 실행됩니다실제 개발할 때 서비스 호출 방법이 필요하면 귀속 서비스로 한 번만 귀속할 수 있습니다.여러 번 묶으면 묶음을 풀 때 onUnbind () 방법이 호출되지 않을 뿐만 아니라 두 번째 묶음을 풀 때 프로그램 이상을 초래할 수 있습니다.
두 가지 오픈 서비스 방식의 비교
start 방식으로 서비스 시작
서비스가 시작되면 장기 백그라운드가 운행되고 서비스와 오픈자(Activity)는 아무런 관계가 없다. 오픈자가 퇴장하면 서비스는 계속 백그라운드에서 장기 운행한다오픈자(Activity)는 서비스에 있는 방법을 호출할 수 없습니다시스템 설정 인터페이스에서 관찰할 수 있음
bind 방식으로 서비스 오픈
오픈자(Activity)가 종료되면 서비스도 종료오픈자(Activity)는 중간인을 간접적으로 이용하여 서비스 안의 방법을 호출할 수 있다시스템 설정 인터페이스에서 볼 수 없습니다.

서비스가 열리고 동시에 귀속되면 서비스가 멈추지 않습니다. 귀속 서비스를 해제해야 서비스를 정지할 수 있습니다.
혼합 방식으로 서비스를 시작합니다.
서비스가 장기적으로 백그라운드에서 운행되고 서비스 안에 호출되는 방법을 확보하기 위해 혼합된 방식으로 서비스를 시작한다.
코드를 작성하려면 다음 절차를 따르십시오.
start 방식으로 서비스 오픈bind 방식 귀속 서비스(서비스 호출 가능한 방법)unbind 방식으로 귀속 해제 서비스stop 방식으로 서비스 중지
로컬 및 원격 서비스
로컬 서비스 local 서비스 코드는 현재 응용 프로그램 내부에 있습니다 원격 서비스remote 서비스 서비스의 코드는 다른 응용 프로그램에 있습니다

좋은 웹페이지 즐겨찾기