2011-09-13 6 views
0

長期実行プロセスを実行してHandlerを呼び出すためにandroid.app.Service(IntentServiceではなく、AsyncTask) .sendMessage(..)プロセス中に。Android:How to:バックグラウンドで実行されているサービスを作成し、Handler.sendMessage(..)を呼び出してください。

以下のコードを使用すれば十分です(サービスのonCreateメソッド)?

@Override 
public void onCreate() { 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      Log.w(LOG_LOGCAT_TAG, "DEBUG MODE - CallbackImpl handleError() called"); 
      // get the location information (lat,lon,altitude etc..) 
      // then, call callback methods. 
      _locationProvider.getLocation(_locationCallbackImpl); 
     } 

    }).start(); 
} 

private final LocationCallbackImpl _locationCallbackImpl = new LocationCallbackImpl(); 

private class LocationCallbackImpl 
    implements 
     LocationCallback 
     { 
    @Override 
    public void done() { 
     Log.i(LOG_LOGCAT_TAG, "LocationCallbackImpl done() called"); 
     // switch to UI thread 
     _handler.sendMessage(_handler.obtainMessage(DONE_MESSAGE)); 
    } 

    @Override 
    public void handleError(ReturnCode returnCode) { 
     Log.e(LOG_LOGCAT_TAG, "LocationCallbackImpl handleError() called:" + returnCode.name()); 

     // send a message to display the error 
      _handler.sendMessage(_handler.obtainMessage(ERROR_MESSAGE, returnCode)); 
    } 

    @Override 
    public void handleSuccess(Location location) { 
     Log.i(LOG_LOGCAT_TAG, "LocationCallbackImpl handleSuccess() called"); 
      _handler.sendMessage(_handler.obtainMessage(LOCATION_MESSAGE, location)); 
    } 
} 

そして、すべてのコールバックは、上記で作成したスレッドで呼び出される場合、皆さんにお願いしたいのも?

実際にスレッドで実行されているかどうかを確認するにはどうすればよいですか?それをチェックする方法はありますか?

答えて

1

getter and setter of Handler inside serviceを実装し、通知を受け取るアクティビティからこのハンドラを設定する必要があります。

+0

ハンドラのゲッタ/セッタを適用するためにサンプルコードを修正しますか? – eros

関連する問題