8

重複の可能性:
Application#onCreate()からServiceを開始できますか?

アプリケーションクラスからサービスを開始できますか?

アプリケーションの起動時にサービスを開始したい。それで、開始アクティビティからサービスを開始する代わりに、これにアプリケーションクラスを使用できますか?ありがとう。

私が試したのはInsideアプリケーションクラスです:

public void onCreate() {
    super.onCreate();


    Log.i("Logger", "Service Starting");
    Intent errorLoggerService = new Intent(getApplicationContext(),
            ErrorLoggerService.class);
    getApplicationContext().startService(errorLoggerService);
}
4

2 に答える 2

28

はい、API ラベル 26 以前はこれを行うことができましたが、現在はできません。

API バージョンが 26 未満の場合

public class MyApplication extends Application {
    public void onCreate() {
        super.onCreate();
        startService(new Intent(this, MyService.class));
    }
}

EDIT getApplicationContext() を呼び出さないでください。startService() を呼び出すだけです。また、マニフェストでサービスを宣言したことを確認してください。

API ラベル 26 以降の場合

EDIT 2 公式 Google ドキュメントから: https://developer.android.com/guide/components/services.html#StartingAService

注: アプリが API レベル 26 以上を対象としている場合、アプリ自体がフォアグラウンドにない限り、システムはバックグラウンド サービスの使用または作成に制限を課します。アプリでフォアグラウンド サービスを作成する必要がある場合、アプリは startForegroundService() を呼び出す必要があります。このメソッドはバックグラウンド サービスを作成しますが、このメソッドは、サービスがそれ自体をフォアグラウンドに昇格させることをシステムに通知します。サービスが作成されたら、サービスはその startForeground() メソッドを 5 秒以内に呼び出す必要があります。

そのため、最近ではアプリケーションからバックグラウンド サービスを開始することはできません。バックグラウンド サービスを開始できるのは、GUI コンポーネントのみです。

または、アプリケーションなどのバックグラウンド コンポーネントからフォアグラウンド サービスを開始できます。

于 2012-09-12T06:35:43.220 に答える
-3

はい、インテントを使用してサービスを開始できます。

Intent serviceIntent = new Intent();
serviceIntent.setAction("packagename.serviceName");
context.startService(serviceIntent);    
于 2012-09-12T06:00:43.673 に答える