통신 템플릿을 위한 활동 및 서비스(Service)

4999 단어 약기
예를 들어 현재 My Service에서 다운로드 기능을 제공하고 싶은데, 활동 중에 언제 다운로드를 시작할지, 그리고 언제든지 다운로드 진도를 볼 수 있다.이 기능을 실현하는 사고방식은 전문적인 Binder 대상을 만들어서 다운로드 기능을 관리하는 것이다.코드는 다음과 같습니다.
public class MyService extends Service{

        private DownloadBinder mBinder = new DownloadBinder();

        class DownloadBinder extend Binder{

            public void startDownload(){
                Log.d("MyService", "startDownload executed");
            }

            public int getProgress(){
                Log.d("MyService", "getProgress executed");
                return 0;
            }
        }

        @Override
        public IBinder onBind(Intent intent){
            return mBinder;
        }
        ...
}

이벤트와 서비스가 연결되면 이 서비스의 Binder가 제공하는 방법을 호출할 수 있습니다.다음은 이벤트에서 서비스를 호출하는 방법에 대해 살펴보겠습니다.
public class BindServiceActivity extends AppCompatActivity implements View.OnClickListener{

    private MyService.DownloadBinder downloadBinder;

    private ServiceConnection connection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            downloadBinder = (MyService.DownloadBinder)service;
            downloadBinder.startDownload();
            downloadBinder.getProgress();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bind_service);
        ...
        Button bindService = (Button)findViewById(R.id.bind_service);
        Button unbindService = (Button)findViewById(R.id.unbind_service);
        bindService.setOnClickListener(this);
        unbindService.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            ...
            case R.id.bind_service:
                Intent bindIntent = new Intent(this, MyService.class);
                bindService(bindIntent, connection, BIND_AUTO_CREATE); //    
                break;
            case R.id.unbind_service:
                unbindService(connection); //    
                break;
            default:
                break;
        }
    }
}

이제 우리는 활동 중에 구체적인 장면에 따라 Download Binder의 모든 공공 방법을 호출할 수 있다.설명: bindService의 세 번째 매개변수 BINDAUTO_CREATE는 활동 및 서비스가 바인딩된 후 자동으로 서비스가 생성됨을 나타내는 플래그 비트입니다.
서비스를 소각하는 특수한 상황에 대해 우리는 한 서비스에 대해 start 서비스 () 방법을 호출했고bind 서비스 () 방법을 호출했다. 이런 상황에서 어떻게 서비스를 소각해야 합니까?안드로이드 시스템의 메커니즘에 따르면 하나의 서비스는 시작되거나 귀속된 후에 계속 운행 상태가 되므로 상기 두 가지 조건을 동시에 만족시키지 못하게 해야 서비스가 소각될 수 있다.따라서 이 경우 stop 서비스 () 와 unbind 서비스 () 방법을 동시에 호출해야 onDestroy () 방법이 실행됩니다.

좋은 웹페이지 즐겨찾기