Android 啟動和停止服務
本篇文章還是在Android 服務(service)的基礎用法的基礎上進行修改,定義好了服務之後,下面就來看一下如何去啟動和停止這個服務,啟動和停止的方法當然你也不會陌生,主要是藉助Intent來實現的,下面我們在ServiceTest專案中嘗試去啟動和停止MyService這個服務.
activity_main.xml中的程式碼,如下:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.servicetest.MainActivity"> <Button android:id="@+id/start_service" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Start Service" android:textAllCaps="false"/> <Button android:id="@+id/stop_service" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Stop Service" android:textAllCaps="false" app:layout_constraintTop_toBottomOf="@id/start_service"/> </android.support.constraint.ConstraintLayout>在佈局檔案中加入了兩個按鈕,分別是用於啟動和停止服務的.
MainActivity.java中的程式碼,如下:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button startService = findViewById(R.id.start_service); Button stopService = findViewById(R.id.stop_service); startService.setOnClickListener(this); stopService.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.start_service: Intent startIntent = new Intent(this,MyService.class); startService(startIntent);//啟動服務 break; case R.id.stop_service: Intent stopIntent = new Intent(this,MyService.class); stopService(stopIntent);//停止服務 break; default: break; } } }可以看到,這裡在onCreate()方法中分別獲取到了Start Service按鈕和Stop Service按鈕的例項,並給它們註冊了點選事件,然後在Start Service按鈕的點選事件裡,我們構建了一個Intent物件,並呼叫startService()方法來啟動MyService服務,在Stop Service按鈕的點選事件裡,我們同樣構建了Intent物件,並呼叫stopService()方法來停止MyService這個服務,startService()和stopService()方法都是定義在Context類中,所以我們在活動裡可以直接呼叫這兩個方法,注意,這裡完全是由活動來決定服務如何停止的,如果沒有點選Stop Service按鈕,服務就會一直處於執行狀態,那服務有沒有什麼辦法讓自己停止下來呢?當然是可以的,只需要在MyService的任何一個位置呼叫stopSelf()方法就能讓這個服務停止下來了.
那麼接下來又有一個問題,我們如何才能證實服務已經成功啟動或者停止了呢?最簡單的方法就是在MyService的幾個方法中加入列印日誌,如下:
public class MyService extends Service { private static final String TAG = "MyService"; public MyService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } @Override public void onCreate() { super.onCreate(); Log.d(TAG, "onCreate: executed"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d(TAG, "onStartCommand: executed"); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy: executed"); } }現在可以執行一下程式來進行測試,程式的主介面如圖:
點選一下Start Service按鈕,觀察logcat中的列印日誌,如下:
MyService中的onCreate()和onStartCommand()方法都執行了,說明這個服務確實已經啟動成功了,然後再點選一下Stop Service按鈕,觀察logcat中的列印日誌,如下:
由此證明,MyService確實已經成功停止下來了.
其實onCreate()方法是在服務第一次建立的時候呼叫的,而onStartCommand()方法則在每次啟動服務的時候都會呼叫,由於剛才我們是第一次點選Start Service按鈕,服務此時還未建立,所以兩個方法都會執行,之後如果你再連續多點選幾次Start Service按鈕,你就會發現只有onStartCommand()方法會得到執行了.
相關文章
- 啟動和停止任務
- systemctl 命令在 Linux 中啟動、停止和重新啟動服務Linux
- Ubuntu 下啟動/停止/重啟mysql服務UbuntuMySql
- linux停止和檢視啟動服務的命令Linux
- Oracle TNSListener服務啟動後自動停止問題Oracle
- HP-UX啟動停止配置sendmail服務方法UXAI
- 在Linux中,如何啟動、停止或重啟服務?Linux
- shell指令碼監控啟動停止weblogic服務指令碼Web
- 在命令列的模式下啟動及停止sqlexpress服務!命令列模式SQLExpress
- Oracle之 服務啟動&停止指令碼與開機自啟動(單例項)Oracle指令碼單例
- windows下注冊表中控制例項隨著服務啟動和停止的選項Windows
- centos 自動啟動指令碼和自啟動服務CentOS指令碼
- Android四大元件之服務————服務的生命週期和啟動方式Android元件
- 【轉載】【錯誤解決】本地計算機上的mysql服務啟動停止後,某些服務在未由其他服務或程式使用時將自動停止計算機MySql
- nginx啟動命令和停止命令。Nginx
- 啟動和停止資料庫.資料庫
- solaris啟動ftp和telnet服務FTP
- 利用WinSW將Nginx 作為可正常啟動/停止的windows服務NginxWindows
- ORACLE EXPDP IMPDP 中停止和啟動Oracle
- Win10系統ComputerBrowser服務啟動後又停止如何解決Win10
- oracle手動啟動服務Oracle
- oracle 啟動停止Oracle
- gitblit 服務啟動不了Git
- 百度搜尋:藍易雲【Ubuntu系統如何啟動、停止或重啟服務。】Ubuntu
- Windows系統下Tomcat服務無法啟動,返回錯誤“服務因 1 (0x1) 服務性錯誤而停止”WindowsTomcat
- 4.1.4 關於啟動和停止Oracle RestartOracleREST
- 如何檢測Windows服務停止後自動啟動?自動執行.bat批處理檔案?WindowsBAT
- Express 原始碼分析1-(服務啟動和請求服務過程)Express原始碼
- redis的安裝和啟動和檢測和停止Redis
- nginx啟動,停止命令Nginx
- PostgreSQL:啟動與停止SQL
- linux 下啟動服務Linux
- 服務啟動一個程式
- 怎麼啟動postgresql服務SQL
- mongodb服務在哪裡啟動?MongoDB
- windows下啟動nacos服務Windows
- python 啟動http服務PythonHTTP
- Android高手進階教程(十八)之---列出Android裝置中所有啟動的服務,及判斷某個服務是否開啟!Android