間違っている! Application
クラスを拡張してください(IEはあなた自身で作成してください)。次にonCreate()
メソッドでこれを行います。
//Service is below
Intent serviceIntent = new Intent(getApplicationContext(), PlaylistUpdaterService.class);
startService(serviceIntent);
そして、そのインテントフィルタをマニフェストファイルの宣言から削除します。
<service android:name=".PlaylistUpdaterService">
としてApplication
クラスは、すぐにアプリがあるとして起動されているため、この操作を行うだけ
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
理由はあなたの家の活動にする必要がありますが、以下のインテントフィルタを、それを残すと、アンドロイドフレームワークが管理するグローバルクラスの一種として機能します。
実際にホーム画面に戻るたびにサービスを実行する場合は、ホームクラスonResume()
でサービスを開始する必要があります。アプリケーションに入れる場合は、ユーザーが初めて起動した場合、または実行中のプロセスが終了した後にのみ、サービスが開始されます。onCreate()
または、あなたの家のクラスonCreate()
に入れることができますが、毎回実行することさえ保証されていません。
この種のメソッドは、アクティビティの実行中にUIをロックしますが、半透明に設定されているため、何もできません。このUIロックを避ける方法はありますか? –
@ Noble6 - 私の答えを更新しました。貴重なコメントをありがとう。 – Zelimir
アクティビティを使用する必要はありません。これは、アクティビティの開始と停止のオーバーヘッドにより、アプリケーションの起動時間が遅くなるだけです。アプリをオーバーライドする以下のアプローチが優れています。ただし、実際にアクティビティから開始したい場合は、サービスがまだ開始されていない場合はデフォルトの動作としてサービスを開始する基本アクティビティを作成し、すべてのアクティビティでそのベースアクティビティを延長する方がよいでしょう。 –