0

したがって、2つのAndroidアクティビティがあります(アクティビティ1( SignUpActivity )、アクティビティ2( RegisterActivity ))

最初のアクティビティは、新しいユーザーの場合に 2 番目のアクティビティを開始することになっています (問題ではありません)。

秘訣は、最初に特定のサービスを呼び出す必要があることです。このサービスは、特定のサーバーを呼び出し、データを取得して (RegisterActivity) に提供します。

そのためには、いくつかの可能な解決策があります

  1. サービスは必要ありません。アクティビティ 1 から HTTP 要求を作成するだけで済みます。ただし、SignUpActivity に AsyncTask を拡張するクラスが既にあります。別のジョブがあります (基本的に、ユーザーをサインインさせます。

  2. サービスを呼び出してからアクティビティ 2 を呼び出すことができます (これは簡単な解決策です)。しかし、サービスが終了する前に 2 番目のアクティビティが開始されます。つまり、まだ null であるデータにアクセスしようとします。

2 番目の解決策は実装が簡単に思えますが、私が考えることができる唯一の方法は、セマフォ ロックを使用することです。これは私があまり得意ではないことであり、それが最も賢明な解決策であるかどうかはわかりません.

私はそれを使用しようとしましたが、うまくいかず、これが正しい方法だとは感じませんでした

その問題を解決する賢い方法は何だと思いますか。

4

2 に答える 2

2
  • 最適なオプションは、特定のタスクが終了したときに、最初のアクティビティから 2 番目のアクティビティを作成することです。このためAsyncTaskに、アクティビティ 1 で別のアクティビティを作成し、終了時にアクティビティ 2 を開始できます (いくつかの異なる目的を並行して実行できますAsyncTasks)
    編集
    して、それらが並行して実行されることを確認し、タスクごとに );` に変更yourTask.execute(params)する だけです。yourTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params

  • 別のオプションは、サービスが必要であると判断したときに、サービスからアクティビティ 2 を作成することです。

于 2013-11-05T16:59:44.483 に答える
0

2 つ目の AsyncTask を使用することをお勧めします。これは、2 つ目のアクティビティを開始する前に、Service が戻るのを確実に待つ必要があるためです。

複数の AsyncTask を同時に実行すると、それらはAsyncTaskクラスによって順次実行されることに注意してください (最大 10 個の AsyncTask を受け入れるキューを設定します)。

2 つのタスクを並行して実行する必要がある場合は、2 番目のアクティビティの起動を含むタスクを渡すために aThreadPoolと usingを実装することをお勧めします。Runnable

これは、私のプロジェクトの 1つからのThreadPoolの例です。非常に一般的であるため、大まかにコピーできます。

ランナブルの例は次のとおりです。

Runnable task = new Runnable() {
    @Override
    public void run() {

       // Call service and wait for it to finish //

       startActivity(new Intent("com.example.project.RegisterActivity);
    }
};

ThreadPool.executeTask(task);    // We use the ThreadPool to run the 'task' Runnable

コードがメイン スレッドから実行する必要があると不平を言う場合は、最初のアクティビティで定義された を使用して、内部から呼び出しHandlerを投稿する必要があります。startActivity()Runnable.

于 2013-11-05T17:10:30.527 に答える