バインドサービス
5211 ワード
/*Googleはandroid 5から要求した.0を開始するには、表示Intentを使用してサービスコンポーネントを起動する必要があります.*起動タイプとバインドタイプの違い:*-起動タイプ:ActivityとServiceは相対的に独立しており、Activityは破棄され、サービスは終了しません.*–ライフサイクル:1つのサービスは1回のみ作成され、破棄されますが、複数回開始できます.*つまり、onCreateメソッドとonDestroyメソッドは1回のみ呼び出され、onStartメソッドは複数回呼び出されます.*バインドタイプ:ActivityとServiceバインド、Activityが終了し、サービスも自動的に破棄されます.*サービスとAvtivity通信*•サービスとAvtivityの間でサービス接続インタフェースを使用して通信する*サービス接続の説明*–サービス接続コールバックインタフェースは、onサービス接続およびonサービスDisconnectedイベントを受信するために使用されます*–bindServiceメソッドが非同期で実行されているため、bindServiceメソッドが戻った後、すぐにサービスのインスタンスを取得することはできません.*onサービス接続イベントに応答する必要があります.このイベントでServiceのインスタンスを取得し、初期化された作業を実行します.*ServiceとAvtivityの通信原理*ActivityはbindServiceメソッドを呼び出し、MyStartServiceオブジェクトの参照を取得します.これにより、ActivityはMyStartServiceのメソッドを直接呼び出すことができます.*/
public class MainActivity extends Activity implements OnClickListener {
Button bindService, unbindService;
Intent intent;
ServiceConnection conn = new ServiceConnection()
{
@Override
public void onServiceDisconnected(ComponentName name) // ;
{
System.out.println("onServiceDisconnected...");
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) // ;
{
MyBinder myBinder = (MyBinder) service;
myBinder.method();
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bindService = (Button)findViewById(R.id.bindService);
unbindService = (Button)findViewById(R.id.unbindService);
bindService.setOnClickListener(this);
unbindService.setOnClickListener(this);
intent = new Intent(this, MyBindService.class);
}
@Override
public void onClick(View v)
{
switch(v.getId())
{
case R.id.bindService:
bindService(intent, conn, BIND_AUTO_CREATE);
// , 3 0 ,service ,ServiceConnection ;
break;
case R.id.unbindService:
unbindService(conn); // ;
break;
}
}
}
public class MyBindService extends Service {
public class MyBinder extends Binder {
public void method()
{
System.out.println("MyBinder.method()...");
}
}
@Override
public IBinder onBind(Intent intent)
{
IBinder iBinder = new MyBinder();
return iBinder;
}
@Override
public void onCreate()
{
super.onCreate();
System.out.println("service is created...");
}
@Override
public void onDestroy()
{
super.onDestroy();
System.out.println("service is destoryed...");
}
}