2022年3月12日 星期六

Android Studio - Service 生命週期(Service Lifecycle)使用例子(六十三)

Android Studio - Service 生命週期(Service Lifecycle)使用例子(六十三):

Service(服務)是 Android 應用程式提供的一個執行背景程式而不需與使用者互動的元件,Service 像 Activity 一樣,一個 Service 也有生命週期方法,可以執行監視它的狀態改變。但是比 Activity 的生命週期方法少,只有三個且它們是公有的(public)而不是受保護的(protected)。下面是一個例子程式,程式開始是由 Activity 呼叫 Service(服務),然後便會執行 Service 背景程式 onCreate → onStartCommand,完成後便會 onDestory 銷燬 Service。

Service 生命週期(Service Lifecycle)使用例子顯示

  • 操作系統:Windows 7 64-bit 版本
  • 開發環境:Android Studio 4.0.1 版本
  • 原程式:C:\Development\Development_Android\Android_Project\DIY-Android-091-08 ServiceExample
  • 程式:C:\Development\Development_Android\Android_Project\DIY-Android-091-08 ServiceExample

Activity 呼叫 Service(服務)程式範例:

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

 

public class MainActivity extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        Intent intent = new Intent(MainActivity.this, ServiceExample.class);

        startService(intent);

    }

}


Service(服務)程式範例:

import android.app.Service;

import android.content.Intent;

import android.os.IBinder;

import android.util.Log;

 

public class ServiceExample extends Service {

    private static final String TAG = "Android-Service";

    private boolean isRunning  = false;

 

    @Override

    public void onCreate() {

        Log.i(TAG, "Service onCreate");

        isRunning = true;

    }

 

    @Override

    public int onStartCommand(Intent intent, int flags, int startId) {

        Log.i(TAG, "Service onStartCommand");

        new Thread(new Runnable() {

            @Override

            public void run() {

                for (int i = 0; i < 5; i++) {

                    try {

                        Thread.sleep(1000);

                    } catch (Exception e) {

                    }

                    if(isRunning){

                        Log.i(TAG, "Service running ... "+i);

                    }

                }

                stopSelf();

            }

        }).start();

        return Service.START_STICKY;

    }

 

    @Override

    public IBinder onBind(Intent arg0) {

        Log.i(TAG, "Service onBind");

        return null;

    }

 

    @Override

    public void onDestroy() {

        Log.i(TAG, "Service onDestroy");

        isRunning = false;

    }

}


設定 AndroidManifest.xml:

        <service

            android:name=". ServiceExample"

            android:screenOrientation="portrait">

        </service>


2022年 3月 12日(Sat)天氣報告
氣溫:43.0°F / 6.0°C @ 07:00
風速:每小時 10公里
降雨機會:2%
相對濕度:百分之 72%
天氣:局部有雲

沒有留言:

張貼留言