2012-04-11 5 views
0

サービスは1回のアクティビティで4回起動されますが、サービスによっていくつのスレッドが作成されますか?そして、サービスが4つの異なる活動によって開始された場合、作成されるスレッドの数はいくつですか? intentServiceから継承されたサービス内で実装する必要がある関数はどれですか?この関数の内部で作成するスレッドの数はいくつですか?は、androidのサービススレッドに関連しています

public class HelloService extends Service { 
    private Looper mServiceLooper; 
    private ServiceHandler mServiceHandler; 

    // Handler that receives messages from the thread 
    private final class ServiceHandler extends Handler { 
     public ServiceHandler(Looper looper) { 
      super(looper); 
     } 
     @Override 
     public void handleMessage(Message msg) { 
     long endTime = System.currentTimeMillis() + 5*1000; 
      while (System.currentTimeMillis() < endTime) { 
       synchronized (this) { 
        try { 
         wait(endTime - System.currentTimeMillis()); 
        } catch (Exception e) { 
        } 
       } 
      } 
      // Stop the service using the startId, so that we don't stop 
      // the service in the middle of handling another job 
      stopSelf(msg.arg1); 
     } 
    } 

    @Override 
    public void onCreate() { 

    HandlerThread thread = new HandlerThread("ServiceStartArguments", 
      Process.THREAD_PRIORITY_BACKGROUND); 
    thread.start(); 

    mServiceLooper = thread.getLooper(); 
    mServiceHandler = new ServiceHandler(mServiceLooper); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); 

     Message msg = mServiceHandler.obtainMessage(); 
     msg.arg1 = startId; 
     mServiceHandler.sendMessage(msg); 

     // If we get killed, after returning from here, restart 
     return START_STICKY; 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onDestroy() { 
    Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show(); 
    } 
} 

答えて

0

サービスは、4回は、どのように多くのスレッドがサービスによって作成された単一のアクティビティによって開始されましたか?

に依存します。 ServiceonCreateに新しいスレッドを作成します。したがって、それが決して殺されなければ、スレッドは1つしか作成されません。もし何とかそれが殺されたら、あなたはあなたがServiceを始めるたびに1で終わるでしょう。

サービスが4つのアクティビティで開始された場合、いくつのスレッドが作成されますか?

と同じです。

intentServiceから継承したサービス内で実装する必要がある関数はどれですか?

docs for IntentServiceをお試しください。onHandleIntentを実装したいと思うでしょう。

この関数内で作成するスレッド数はいくつですか?

ゼロ。

+0

しかし、すべてのサービスがonDestroy()でライフサイクルを完了したとは思わないので、サービス終了時に殺されます。だから新しいスレッドが毎回作成する???両方の場合に答えが4となるでしょうか? –

+0

私が言ったように、それは依存しています。最初の呼び出しが完了する前に2番目(および/または3/4)の時間を呼び出した場合、新しいサービス/スレッドは作成されません。 [documentation](http://developer.android.com/reference/android/app/Service.html)を読んでください。 – kabuko

関連する問題