小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Android之Service學(xué)習(xí)篇一:Service啟動方式之startService

 流浪的星星318 2017-03-03
     1.  在同一個(gè)應(yīng)用任何地方調(diào)用 startService() 方法就能啟動 Service 了,然后系統(tǒng)會回調(diào) Service 類的 onCreate() 以及 onStart() 方法。這樣啟動的 Service 會一直運(yùn)行在后臺,直到 Context.stopService() 或者 selfStop() 方法被調(diào)用。另外如果一個(gè) Service 已經(jīng)被啟動,其他代碼再試圖調(diào)用 startService() 方法,是不會執(zhí)行 onCreate() 的,但會重新執(zhí)行一次 onStart() 。
 
      2. 另外一種 bindService() 方法的意思是,把這個(gè) Service 和調(diào)用 Service 的客戶類綁起來,如果調(diào)用這個(gè)客戶類被銷毀,Service 也會被銷毀。用這個(gè)方法的一個(gè)好處是,bindService() 方法執(zhí)行后 Service 會回調(diào)上邊提到的 onBind() 方發(fā),你可以從這里返回一個(gè)實(shí)現(xiàn)了 IBind 接口的類,在客戶端操作這個(gè)類就能和這個(gè)服務(wù)通信了,比如得到 Service 運(yùn)行的狀態(tài)或其他操作。如果 Service 還沒有運(yùn)行,使用這個(gè)方法啟動 Service 就會 onCreate() 方法而不會調(diào)用 onStart()。
 
區(qū)別概況為:
    startService() 的調(diào)用者與服務(wù)沒有聯(lián)系,即使調(diào)用者退出了,服務(wù)仍然運(yùn)行,而bindService() 的調(diào)用者與服務(wù)綁在一起,調(diào)用者一旦退出了,服務(wù)也隨即終止掉。www.2cto.com
 
這里用一個(gè)實(shí)例(使用startService()方法來啟動)來講解一下service的聲明周期和使用方法:
 
首先編寫一個(gè)類繼承Service這個(gè)基類,重寫里面的方法,然后在Activity中調(diào)用startService()和stopService()來啟動和停止服務(wù)。
運(yùn)行界面:
 
工程目錄結(jié)構(gòu):
 
ExampleService.java
[html] 
package com.service.activity;  
  
import android.app.Service;  
import android.content.Intent;  
import android.os.IBinder;  
import android.util.Log;  
  
public class ExampleService extends Service{  
    private static final String TAG = "ExampleService";   
  
    @Override  
    public void onCreate() {  
        Log.i(TAG, "ExampleService-onCreate");  
        super.onCreate();  
    }  
  
    @Override  
    public void onStart(Intent intent, int startId) {  
        Log.i(TAG, "ExampleService-onStart");  
        super.onStart(intent, startId);  
    }  
  
    @Override  
    public int onStartCommand(Intent intent, int flags, int startId) {  
        //執(zhí)行文件的下載或者播放等操作  
        Log.i(TAG, "ExampleService-onStartCommand");  
        /*  
         * 這里返回狀態(tài)有三個(gè)值,分別是:  
         * 1、START_STICKY:當(dāng)服務(wù)進(jìn)程在運(yùn)行時(shí)被殺死,系統(tǒng)將會把它置為started狀態(tài),但是不保存其傳遞的Intent對象,之后,系統(tǒng)會嘗試重新創(chuàng)建服務(wù);  
         * 2、START_NOT_STICKY:當(dāng)服務(wù)進(jìn)程在運(yùn)行時(shí)被殺死,并且沒有新的Intent對象傳遞過來的話,系統(tǒng)將會把它置為started狀態(tài),  
         *   但是系統(tǒng)不會重新創(chuàng)建服務(wù),直到startService(Intent intent)方法再次被調(diào)用;  
         * 3、START_REDELIVER_INTENT:當(dāng)服務(wù)進(jìn)程在運(yùn)行時(shí)被殺死,它將會在隔一段時(shí)間后自動創(chuàng)建,并且最后一個(gè)傳遞的Intent對象將會再次傳遞過來。  
         */  
        return super.onStartCommand(intent, flags, startId);  
    }  
  
    @Override  
    public IBinder onBind(Intent intent) {  
        Log.i(TAG, "ExampleService-onBind");  
        return null;  
    }  
      
    @Override  
    public void onDestroy() {  
        Log.i(TAG, "ExampleService-onDestroy");  
        super.onDestroy();  
    }  
  
}  
 
MainActivity.java
[html] 
package com.service.activity;  
  
import android.app.Activity;  
import android.content.Intent;  
import android.os.Bundle;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
  
public class MainActivity extends Activity implements OnClickListener{  
    private static final String TAG = "MainActivity";   //日志輸出標(biāo)志  
    private Button btnStartService;  
    private Button btnStopService;  
      
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        btnStartService = (Button)findViewById(R.id.btnStartService);  
        btnStopService = (Button)findViewById(R.id.btnStopService);  
        btnStartService.setOnClickListener(this);  
        btnStopService.setOnClickListener(this);  
    }  
    //點(diǎn)擊事件處理監(jiān)聽器  
    @Override  
    public void onClick(View v) {  
        Intent intent = new Intent(MainActivity.this,ExampleService.class);  
        switch(v.getId()){  
        case R.id.btnStartService:  
            startService(intent);  
            break;  
        case R.id.btnStopService:  
            stopService(intent);  
            break;  
        default:  
            break;  
        }  
    }  
}  
 
最后在AndroidManifest.xml中對service進(jìn)行聲明,它跟Activity同一級,都寫在Application標(biāo)簽里面:
<service android:name=".ExampleService"/>
 
創(chuàng)建完運(yùn)行
 
在運(yùn)行點(diǎn)擊"啟動service"之后(第一次啟動service),我們可以查看LogCat控制臺輸出的日志如下:
這個(gè)時(shí)候我們點(diǎn)擊"返回",Activity被干掉了,但是我們的服務(wù)仍然在運(yùn)行,可以查看Setting-->Application-->Running Service,截圖如下:
 
然后回到我們的Activity,再次點(diǎn)擊啟動Service,控制臺輸出日志如下:
onCreate()方法沒有被調(diào)用,說明它并沒有重新被創(chuàng)建。
然后我們點(diǎn)擊停止Service,輸出日志如下:

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多