2012-05-08 4 views
0

私はこれに関するいくつかの調査を行っていますが、明確な答えは見つかりませんでした。バックグラウンドサービスプロセスのリバック

機能の課題がある:

a)はボタンでレイアウト(OK)

B)(STARTのラベル)ISTは、バックグラウンドサービスを開始]をクリックして活動を開始します(OK)

Cアクティビティを閉じることができますが)、バックグラウンドサービスは

D)(OKを実行し続けなければならない)バックグラウンド・プロセスがまだそこにある、私は私の通知(OKでそれを見ることができます)

e)アクティビティが通知(OK)から再開します

f)アクティビティはプロセスに接続し、プロセスのステータスを取得する必要があります。単にサービスが実行されているかどうかを確認し、(b)から開始停止ボタンのラベルを停止に設定します。

e)ボタンを押すとサービスが停止します。ここで

は、いくつかの詳細は以下のとおりです。

私のサービスLogoTimerServiceへの接続は、このような活動で行われます。RESUME ON

private ServiceConnection mConnection = new ServiceConnection() { 

    @Override 
    public void onServiceConnected(ComponentName className, IBinder service) { 
     // We've bound to LocalService, cast the IBinder and get 
     // LocalService instance 
     LogoTimerServiceBinder binder = (LogoTimerServiceBinder) service; 
     mService = binder.getService(); 
     mBound = true; 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName arg0) { 
     mBound = false; 
    } 
}; 

私は実際に接続するには、この関数を呼び出す:

private void connectLogoTimerService() { 
    Log.i(tag, "-connecting service"); 

    Intent intent = new Intent(this, LogoTimerService.class); 
    startService(intent); 
    bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 

    if (mService!=null) 
     Log.i(tag, "-SERVICE BOUND"); 
    else 
     Log.i(tag, "-Service NOT bound"); 
} 

初めてアプリケーションを起動すると、2番目の(バインドされていない)メッセージが表示されます。

なぜバインドされていないのですか?それは遅くなるのですか? (それは遊んでいるようです)

私が活動を破壊しないなら、mServiceが見つかります。

ステータスを元に戻すにはどうすればよいですか?

私はサービスを開始し、バインドします。これは正しいです?

私はサービスがこのコードを使用して実行されていることを見ることができます(私は、このサイトに感謝し、それを見つけた):

private boolean isMyServiceRunning() { 
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager 
      .getRunningServices(Integer.MAX_VALUE)) { 
     if (LogoTimerService.class.getName().equals(
       service.service.getClassName())) { 
      return true; 
     } 
    } 
    return false; 
} 

はあなたの助けのためにありがとうございました!

答えて

0

最初の質問の答えは、bindServiceが 'async'であるためです。 onServiceConnectedが呼び出される前にifステートメントを入力します。

+0

一度接続すれば情報に戻ることはできますか? – user929995

+0

最初にBindServiceを呼び出すと、アンドロイドシステムがバインディングを開始し、完了したらonServiceConnectedが呼び出されます。この時点で、サービスとアプリケーションはバインドされています。 –

+0

ありがとう、それは動作します。 – user929995

関連する問題