Activityアクセスサービス内部メソッド
4018 ワード
一、サービス起動方式は二つあり、一つはstartService()であり、一つはbindService()であり、両者はライフサイクルが異なる以外に本質的な違いがある.
1、startServiceのプロセスはサービスプロセスであり、bindServiceはフロントまたはバックグラウンドサービスであり、activityと同じプロセスであり、activityが終了するとbindserviceも終了する.
2、bindServiceは起動して、その中に3つのパラメータがあって、第2のパラメータはとても重要で、ServiceConnectedクラス、1つのクラスを作成してこのクラスを継承する時、実現する方法はBindServiceのIbinderインタフェースのオブジェクトにアクセスすることができて、多態を利用して、中の方法にアクセスすることができます;--------bindService()内部エージェントクラスが内部データに間接的にアクセスするように設定します.
一、サービスコード
1、startServiceのプロセスはサービスプロセスであり、bindServiceはフロントまたはバックグラウンドサービスであり、activityと同じプロセスであり、activityが終了するとbindserviceも終了する.
2、bindServiceは起動して、その中に3つのパラメータがあって、第2のパラメータはとても重要で、ServiceConnectedクラス、1つのクラスを作成してこのクラスを継承する時、実現する方法はBindServiceのIbinderインタフェースのオブジェクトにアクセスすることができて、多態を利用して、中の方法にアクセスすることができます;--------bindService()内部エージェントクラスが内部データに間接的にアクセスするように設定します.
一、サービスコード
public class ServiceTest extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
// Binder return new ZhouMiShu();
}
public class ZhouMiShu extends Binder{
public void QianXian(){
banZheng();
}
}
public void banZheng(){
System.out.print(" ");
}
}
、 :
public class MainActivity extends AppCompatActivity {
Intent intent;
ServiceTest.ZhouMiShu zhouMiShu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intent=new Intent();
intent.setClass(this, ServiceTest.class);
bindService(intent, new MyConnection(),BIND_AUTO_CREATE );
}
public void click(View view){
// zhouMiShu.QianXian();
}
class MyConnection implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// Binder zhouMiShu= (ServiceTest.ZhouMiShu) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
}