2012-01-13 11 views

答えて

-1

、私はこのような人を持って、それが仕事だ:

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(); 
+2

男は、私は.. Uが活動を開始rはサービスを開始について尋ね – carora3

+0

ので、何? startActivityをstartService(i)に変更します。 –

+0

それはうまく動作しません:(それはちょうどすべてがうまくいくように見えるときにちょうどうまくいく... – carora3

2

他のアプリケーションオブジェクトのようなサービスは、そのホストプロセスのメインスレッドで実行することに注意してください」http://developer.android.com/reference/android/app/Service.html

から引用これは、サービスがCPUを集中的に(MP3再生など)、またはブロックする(ネットワーキングなど)操作を行う場合、その作業を行う独自のスレッドを生成する必要があることを意味します。 in Process and Threads。IntentServiceクラスは、サービスの標準実装として利用できます。そのスレッドが自分の作業をスケジューリングする場所を指定します。

+0

私はすでにそれを読んでいます:)新しいスレッドでサービスを実行する方法を理解できません。私はこのフォーラムで他の質問からのコードを試しましたが、私のために働いています。 – carora3

+0

ここでIntentServiceを使用しましたか? http://developer.android.com/reference/android/app/IntentService.html – Stefan

+0

また、次のように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

8

_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 
} 
+0

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 –

+1

@MDどういう意味ですか?それは明らかに答えを提供します...あなたは別の投稿を意味するのでしょうか? – theomega

+1

開始直後に 'stopSelf();'が表示されるのはなぜですか? –

3

新しいスレッドでサービスを開始することはできませんが、サービスで新しいスレッドを開始することができます。

これは、アクティビティと同様に、サービスにはメインスレッドで実行されるライフサイクルメソッドがあるためです。

サービスはメインスレッドで実行されますが、必要なときに作成される新しいスレッドで重い作業が行われます。私はそれが役に立てば幸い

..

関連する問題