0

アクティビティでハンドラを作成しました。ハンドラーはアプリケーション オブジェクトに格納されます。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.action_activity);
    appData = (AttachApplication) getApplication();

    Handler updateHandler = new Handler() {
        public void handlerMessage(Message msg) {
            Log.d( TAG, "handle message " );
        }
    };
    appData.setUpdateHandler( updateHandler );


}

私の計画は、サービスでEmtpyMessageを設定すると、このhandleMessageが呼び出されることです。サービスは、アプリケーション オブジェクトからハンドラーを取得します。

public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(TAG, "onStartCommand of attachService");
    List<Job> jobList = DBManager.getInstance().getAllOpenJobs();
    appData = (AttachApplication) getApplication();
    updateHandler = appData.getUpdateHandler();
            updateHandler.sendEmptyMessage( 101 );

ログを確認しましたが、ハンドル メッセージがないため、私の計画は機能していないようです。サービスが機能するたびにテキストフィールドを更新したいと考えています。

4

3 に答える 3

0

あなたの場合、次のように BroadcastReceiver を使用する必要があります。

Activity クラスでレシーバーを定義します。

public class DataUpdateReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(MainService.REFRESH_DATA_INTENT)) {
                        //do something
        }
    }
}

onCreate または onStart メソッドで、レシーバーを登録する必要があります。

DataUpdateReceiver dataUpdateReceiver = new DataUpdateReceiver();
IntentFilter intentFilter = new IntentFilter(MainService.REFRESH_DATA_INTENT);
registerReceiver(dataUpdateReceiver, intentFilter);

あなたのサービスにこれを追加してください:

public static final String REFRESH_DATA_INTENT = "done";

すべてのスタッフを完了したら、次のようにブロードキャストを送信する必要があります。

sendBroadcast(new Intent(MainService.REFRESH_DATA_INTENT));
于 2012-12-18T21:01:31.047 に答える
0

あなたのコードスニペットは言ってpublic void handlerMessage(Message msg)いますが、私はあなたが意味public void handleMessage(Message msg)していると思いますr. スーパークラスのメソッドをオーバーライドする場合は、@Override タグを使用することでこれらの問題を回避できます。@Override public void handleMessage(Message msg)したがって、スニペットはレンダリングされます@Override public void handlerMessage(Message msg)が、エラーになります。

于 2012-12-18T21:02:45.270 に答える
0

あなたは何をしようとしているのですか?あなたがしているのは MessageQueue からメッセージを取得することだけなので、Activity で Handler をインスタンス化する意味がわかりません。Android が投稿するメッセージをいじりたくないのは確かです。Activity にメッセージを送信するもっと良い方法があります。

もちろん、AttachApplication のコードは含まれていないので、推測するしかありません。

また、サービスからこのハンドラにアクセスしようとしています。何かが起こっていますが、何が起こっているのかわかりません。

サービスがジョブを実行するたびに TextView を更新する場合は、ブロードキャスト インテントをサービスからアクティビティに送信し、アクティビティでブロードキャスト レシーバーを使用します。Service の代わりに IntentService を使用することも検討する必要があります。

于 2012-12-18T21:02:48.753 に答える