1. 程式人生 > >Activity訪問Service內部方法

Activity訪問Service內部方法

一、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 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) { } } }