這篇文章將為大家詳細講解有關(guān)Android中service的組件是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
成都創(chuàng)新互聯(lián)是專業(yè)的文峰網(wǎng)站建設(shè)公司,文峰接單;提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行文峰網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
活動綁定服務(wù)并在活動里調(diào)用服務(wù)的方法。
如果直接在活動里new了一個服務(wù)的對象,是不能調(diào)用服務(wù)的方法的,因為這個時候服務(wù)還沒有啟動,這個時候需要在activity里調(diào)用bindService方法,使activity與服務(wù)綁定,綁定服務(wù)后,會自動調(diào)用服務(wù)里的OnBind()方法,返回一個Binder對象給activity使用,通過該對象來調(diào)用service里的方法。
OnBind()
當(dāng)組件調(diào)用bindService()想要綁定到service時(比如想要執(zhí)行進程間通訊)系統(tǒng)調(diào)用此方法.在你的實現(xiàn)中,你必須提供一個返回一個IBinder來以使客戶端能夠使用它與service通訊,你必須總是實現(xiàn)這個方法,但是如果你不允許綁定,那么你應(yīng)返回null.
之前一直不理解bindService()方法的原理,下面來寫一下自己的理解:
1、在service里,新建一個內(nèi)部類MyBinder extends Binder,在這個類里實現(xiàn)與service的通信方法。同時service里有個onBind() 方法,該方法只有在activity調(diào)用bindService()時才會執(zhí)行,返回一個binder對象,即在service里創(chuàng)建的那個內(nèi)部類MyBinder的對象。
2、在activity中調(diào)用bindService對象時,新建的那個匿名內(nèi)部類,new ServiceConnect(){
} 這里的onServiceConnect(ComponentName name, IBinder service)這里參數(shù)里的service即我們在service的onBinder()方法里返回的那個對象。
借著這個service對象,就可以操做Service服務(wù)里的方法了。
MainActiivty.java
package com.yuanlp.servicedemo; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.support.v7.app.AppCompatActivity; import android.view.View; public class MainActivity extends AppCompatActivity { private ServiceConnection conn=new ServiceConnection() { private MyService services=null; @Override //服務(wù)與活動綁定時觸發(fā) public void onServiceConnected(ComponentName name, IBinder service) { MyService.MyBundler bundler= (MyService.MyBundler) service; //返回的是service里的那個bundler的實例 services = bundler.getService(); services.execute(); } @Override public void onServiceDisconnected(ComponentName name) { //服務(wù)與活動鏈接斷開時調(diào)用 } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void startService(View view){ Intent service = new Intent(this, MyService.class); //startService(service); bindService(service,conn, Context.BIND_AUTO_CREATE); } public void stopServicess(View view){ // Intent stopServices = new Intent(this, MyService.class); // stopService(stopServices); unbindService(conn); } public void onDestroy(){ unbindService(conn); //當(dāng)活動銷毀時,取消綁定 super.onDestroy(); } }
Myservice.java
package com.yuanlp.servicedemo; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; import android.util.Log; public class MyService extends Service { private static final String TAG = "MyService"; public class MyBundler extends Binder { MyService getService(){ return MyService.this; //返回當(dāng)前的service對象 } } private MyBundler bundler=new MyBundler(); public MyService() { Log.d(TAG, "MyService: 構(gòu)造方法"); } @Override public IBinder onBind(Intent intent) { return bundler; } public void onCreate(){ //再服務(wù)創(chuàng)建時啟用 super.onCreate(); } /** * 在服務(wù)啟動的時候調(diào)用 * @param intent * @param flags * @param startId * @return */ public int onStartCommand(Intent intent,int flags,int startId){ Log.d(TAG, "onStartCommand: "); return super.onStartCommand(intent,flags,startId); } /** * 在服務(wù)銷毀時調(diào)用 */ public void onDestroy(){ Log.d(TAG, "onDestroy: "); super.onDestroy(); } public void execute(){ Log.d(TAG, "execute: 被執(zhí)行了"); } }
關(guān)于Android中service的組件是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。