0

私は、すべて同じアプリケーションに関連付けられたいくつかの異なるアクティビティで構成される Android プロジェクトに取り組んでいます。アプリケーションにはいくつかの一般的なタスクがコード化されているため、それらを複製する必要はありません。これらのタスクの 1 つは、専用サーバーへの TCP 接続を定期的に検証することです。

サーバーへの接続が失われていることが検出された場合は、ユーザーに通知する必要があります。現在「一番上」にあるものを確認するために、考えられるすべてのアクティビティをチェックする必要がない方法でこれを行いたいと考えています。 .

明示的に知らなくても、UI スレッド上にあるアクティビティで runOnUiThread() を呼び出す方法はありますか??

ありがとう、
R.

4

4 に答える 4

2

TCP接続を定期的に確認する

このようなサウンドは、サービスを使用して実装する必要があります。

アラートが非常に単純で、重要性が最小限である場合は、トーストを使用することをお勧めします。

アラートが重要であるが、ユーザーがすぐに注意を払う必要がない場合は、通知を使用してください。

アラートでユーザーの即時の注意が必要な場合は、ダイアログを使用する必要があります。ウィンドウが関連付けられていないため、サービスまたはブロードキャストレシーバーから直接ダイアログを開始することはできませんが、インテントを使用して新しいタスクでアクティビティを開始することはできます。アクティビティのスタイルを自由に設定できます。ダイアログボックスのように見えることもあります(または、起動時にダイアログボックスを表示することもできます)。新しいタスクでアクティビティを開始すると、ユーザーは自分が行っていることに戻ることができます。

于 2012-09-12T14:39:03.007 に答える
1

簡単な方法の1つ(私もプロジェクトに採用しています)は、基本Activityクラス(できればAbstracted)を作成し、それに通常のアクティビティクラスを作成するextendことです。これにより、抽象化されたクラスに一般的なコードを配置して、現在表示されているアクティビティを検出するのに役立てることができます。

さらに、BroadcastReceiver子アクティビティで個別に設定するかどうかに関係なく、常にブロードキャストを聞く準備ができている基本アクティビティクラスにを設定してから、tcpシンギーから送信されるブロードキャストをリッスンするように設定できます。

于 2012-09-12T14:41:53.387 に答える
1

Intent を送信し、通知を受け取りたい各 Activity に BroadcastReceiver を登録することで、アクティビティを通知できます。

サービスまたはアプリケーションをコンテキストにすることができます。

Intent i = new Intent("MY_ACTION_FROM_SERVICE_STRING");
context.sendBroadcast(i);

アクティビティ:

public class MyActivity extends Activity {
    private ActivityBroadcastReceiver recvr;

    public void onReceiveCommand() {
        //do something
    }
    @Override
    public void onCreate(Bundle b) {
        super.onCreate(b);
        recvr = new ActivityBroadcastReceiver(this);
        this.registerReceiver(recvr,
            new IntentFilter("MY_ACTION_FROM_SERVICE_STRING"));
    }
}

レシーバー:

public class ActivityBroadcastReceiver extends BroadcastReceiver {
    private MyActivity target;
    public ActivityBroadcastReceiver(MyActivity target) {
        this.target = target;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        target.onReceiveCommand();
    }
}
于 2012-09-12T14:38:25.813 に答える
0

ごまかしはしないでください。オブザーバー パターンを実装します。これにより、すべてのアクティビティがリスナーをonResume()登録および登録解除しonPause()、何が起こっても、Applicationオブジェクト コードは登録済みのリスナーにそのことを通知する必要があります。

于 2012-09-12T14:36:35.703 に答える