0

loopj HTTP CLIENTを使用してバックグラウンドで HTTP リクエストをロードしています。完了したら、「成功」通知 (ダイアログ、トーストなど) を表示したいと考えています。

バックグラウンドリクエストを実行する静的メソッドを持つ別の(非アクティビティ)クラスにコードがあります。最終的に、応答は onSuccess メソッドの下の AsyncHttpResponseHandler にあります。この方法では、応答を印刷し、要求が通過したことを確認し、データを SD カード/共有設定に保存できますが、UI スレッドにアクセスして通知を表示するにはどうすればよいですか?

前もって感謝します。

4

3 に答える 3

3

を使用するHandlerか、 を呼び出して実行できますActivity.runOnUiThread()Handler、またはActivityオブジェクトを静的メソッドに渡し、onSuccess()メソッドで、

activity.runOnUiThread(new Runnable() {
    @Override
    public void run() {
      // i'm on the UI thread!
    }
  }
);

また、

handler.post(new Runnable() {
    @Override
    public void run() {
      // i'm on the UI thread!
    }
  }
);
于 2013-01-19T01:29:03.247 に答える
1

バックグラウンドプロセスとしてのサービスを意味していると思います。onCreateサービスには、onStartCommand、 、 などの組み込みメソッドが多数ありますonDestroy。通知を使用することをお勧めします。これは、通知がジョブを実行するために UI スレッドを必要としないためです。

通知を生成するメソッドを作成し、HTML の読み取りが終了した後に呼び出します。

private static void generateNotification(Context context, String message) {
    int icon = R.drawable.ic_stat_gcm;
    long when = System.currentTimeMillis();

    NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notification = new Notification(icon, message, when);

    String title = context.getString(R.string.app_name);
    Intent notificationIntent = new Intent(context, MainActivity.class);
    // set intent so it does not start a new activity
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
    notification.setLatestEventInfo(context, title, message, intent);
    notification.flags |= Notification.FLAG_AUTO_CANCEL;

    notificationManager.notify(0, notification);
}
于 2013-01-19T05:54:32.223 に答える