통신 템플릿을 위한 활동 및 서비스(Service)
4999 단어 약기
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 () 방법이 실행됩니다.