Activity訪問Service內部方法
阿新 • • 發佈:2018-12-15
一、Service啟動方式有兩種,一種startService() ,一種bindService(),兩者除了生命週期有不同之外,還有本質的不同
1、startService 的程序是服務程序 ,bindService是前臺或者後臺Service,與activity同進程,一旦activity退出,則bindservice也會退出;
2、bindService啟動,其中有三個引數,第二個引數很重要,ServiceConnected類,建立一個類繼承該類時,實現的方法可以訪問BindService的Ibinder介面物件,利用多型,便可訪問裡面的方法;-----------bindService()設定內部代理類間接訪問內部資料;
一、Service程式碼
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 voidbanZheng(){ 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) { } } }