新しいスレッドでサービスを開始するにはどうすればよいですか。私は他の質問を見ましたが、それは私のために働きます。通常実行しているときと別のスレッドで実行しているときに、私のサービスで何を変更する必要がありますか?私のプロジェクトで新しいスレッドでサービスを開始するにはどうすればよいですか?
答えて
、私はこのような人を持って、それが仕事だ:
Thread welcomeThread = new Thread() {
@Override
public void run() {
try {
super.run();
while (isMyServiceRunning() != true) {
sleep(100);
}
} catch (Exception e) {
System.out.println("EXc=" + e);
} finally {
Intent i = new Intent(getApplicationContext(), MainPage.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
}
};
welcomeThread.start();
他のアプリケーションオブジェクトのようなサービスは、そのホストプロセスのメインスレッドで実行することに注意してください」http://developer.android.com/reference/android/app/Service.html
から引用これは、サービスがCPUを集中的に(MP3再生など)、またはブロックする(ネットワーキングなど)操作を行う場合、その作業を行う独自のスレッドを生成する必要があることを意味します。 in Process and Threads。IntentServiceクラスは、サービスの標準実装として利用できます。そのスレッドが自分の作業をスケジューリングする場所を指定します。
私はすでにそれを読んでいます:)新しいスレッドでサービスを実行する方法を理解できません。私はこのフォーラムで他の質問からのコードを試しましたが、私のために働いています。 – carora3
ここでIntentServiceを使用しましたか? http://developer.android.com/reference/android/app/IntentService.html – Stefan
また、次のようにWorkerThreadを作成することもできます。 private final class WorkerThread extends Thread { \t public Handler handler; \t @上書き \t public void run(){ \t Looper.prepare(); \tこれです。ハンドラ=新しいハンドラ(){ \t @Override \tます。public voidのhandleMessage(最終メッセージmsg){ \tスイッチ(msg.what){ \t \tケースMSG_DO_MY_JOB: \t \t \t // ... \t \tブレーク; \t \tケースMSG_STOP: YourOuterClass.this.stopSelf(); \t \t break; \t} } }; Looper.loop(); } } サービスの作成時にワーカーを開始し、何かをしたいときにハンドラにメッセージを送信します。 – Stefan
_onStart
にごpublic void onStart(final Intent intent, final int startId)
方法の名前を変更し、この新しいonStart
実装を使用:APIレベル5と
public void onStart(Intent, int)
上記のための
@Override
public void onStart(final Intent intent, final int startId) {
Thread t = new Thread("MyService(" + startId + ")") {
@Override
public void run() {
_onStart(intent, startId);
stopSelf();
}
};
t.start();
}
private void _onStart(final Intent intent, final int startId) {
//Your Start-Code for the service
}
は、これはpublic int onStartCommand(Intent, int)
に置き換えてくださいAPIレベル5で廃止されました
@Override
public int onStartCommand(final Intent intent, final int startId){
//All code from 'onStart()' in above placed here as normal.
}
private void _onStart(final Intent intent, final int startId) {
//Your Start-Code for the service
}
これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 –
@MDどういう意味ですか?それは明らかに答えを提供します...あなたは別の投稿を意味するのでしょうか? – theomega
開始直後に 'stopSelf();'が表示されるのはなぜですか? –
新しいスレッドでサービスを開始することはできませんが、サービスで新しいスレッドを開始することができます。
これは、アクティビティと同様に、サービスにはメインスレッドで実行されるライフサイクルメソッドがあるためです。
サービスはメインスレッドで実行されますが、必要なときに作成される新しいスレッドで重い作業が行われます。私はそれが役に立てば幸い
..
- 1. スレッドのrun()で新しいサービスを開始するには?
- 2. サービスを起動せずにglobal.asaxからサービスを開始するにはどうすればよいですか?
- 3. Valgrindが新しいスレッドごとに埋め込まれたgdbserversを開始しないようにするにはどうすればよいですか?
- 4. 「電話サービス」(電話バンキングなど)の開発を開始するにはどうすればよいですか?
- 5. 既存のプロジェクトでgithubの新しいリポジトリを開始するにはどうすればよいですか?
- 6. 同じタブで新しいアクティビティを開始するにはどうすればよいですか?
- 7. MDIでマウスイベントを開始するにはどうすればよいですか?
- 8. Windowsでサブプロセスを開始するにはどうすればよいですか?
- 9. 新しいPerlモジュール配布を開始するにはどうすればよいですか?
- 10. プレーンCでスレッドを開始するにはどうすればよいですか?
- 11. 特定のコアでスレッドを開始するにはどうすればよいですか?
- 12. Android開発でバックグラウンドでスレッドやサービスを追加するにはどうすればよいですか?
- 13. サービスを開始したアクティビティを確認するにはどうすればよいですか?
- 14. 新しいスレッドでウィンドウを開くにはどうすればよいですか?
- 15. 手動で開始されたスレッドが死ぬのを防ぐにはどうすればよいですか?
- 16. Windows Phone 7でSOAPサービスを開始するにはどうすればよいですか?
- 17. スレッドから新しいフォームを開くにはどうすればよいですか?
- 18. 継続タスクインスタンスを開始するにはどうすればよいですか?
- 19. ブルートゥースペアリングのプロセスを開始するにはどうすればよいですか?
- 20. Javaプログラミングを開始するにはどうすればよいですか?
- 21. アクティビティを開始するにはどうすればよいですか?
- 22. Hadoopのマップを開始するにはどうすればよいですか?
- 23. スレッド内で新しいアクティビティを開始
- 24. Android:サービスからAIDLバインド解除を開始するにはどうすればよいですか?
- 25. Android - 同じ時間にサービスとアクティビティを開始するにはどうすればよいですか?
- 26. 特定の時間にサービスを開始するにはどうすればよいですか?
- 27. kivyのGUIでメモリエラーを防ぐために新しいスレッドを計算を開始するにはどうすればよいですか?
- 28. ASC3(ActionScript 3)フレームの開始時にリスニングを開始するにはどうすればよいですか?
- 29. スレッドから新しいスレッドを開始する
- 30. カラーピケットダイアログを開始するにはどうすればいいですか?
男は、私は.. Uが活動を開始rはサービスを開始について尋ね – carora3
ので、何? startActivityをstartService(i)に変更します。 –
それはうまく動作しません:(それはちょうどすべてがうまくいくように見えるときにちょうどうまくいく... – carora3