簡體   English   中英

如何在服務結束后開始新活動

[英]How to start a new activity after the service ends

所以我有兩個android活動(Activity 1( SignUpActivity ),Activity 2( RegisterActivity ))

第一個活動應該是在新用戶的情況下開始第二個活動(不是問題)

訣竅是我需要先調用某個服務。 此服務將調用某個服務器並獲取一些數據以提供它(RegisterActivity)

所以為了做到這一點,有一些可能的解決方案

  1. 不需要服務,我們可以從活動1發出HTTP請求。但是我已經有一個在SignUpActivity中擴展AsyncTask的類。 它有另一項工作(基本上是用戶簽名)。

  2. 我可以調用該服務然后調用Activity 2(這是一個簡單的解決方案)但是第二個活動將在服務結束之前啟動。 這意味着它將嘗試訪問一些仍為null的數據。

第二種解決方案似乎更容易實現,但我能想到的唯一方法是使用信號量鎖。 這是我不太擅長的東西,我不確定它是最聰明的解決方案。

我嘗試使用它,但它沒有用,我覺得這不是正確的做法

您認為解決該問題的智能方法是什么?

  • 最佳選擇是在特定任務完成時從第一個活動創建第二個活動。 為此,您可以在活動1中創建另一個AsyncTask ,並在完成后啟動活動2(您可以在AsyncTasks運行幾個不同用途的AsyncTasks
    編輯
    要確保它們並行運行,只需將yourTask.execute(params)更改為yourTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params );`為每個任務。

  • 另一種選擇是在服務決定需要時從服務創建活動2。

我建議使用第二個AsyncTask,因為在開始第二個活動之前,您肯定需要等待服務返回。

請記住,如果同時執行多個AsyncTasks,它們將由AsyncTask類(它設置一個最多接受10個AsyncTasks的隊列)按順序執行。

如果你真的需要並行運行這兩個任務,我建議實現一個ThreadPool並使用Runnable傳遞任務,包括啟動第二個活動。

這是我的一個項目中的ThreadPool的示例。 因為它非常通用,你幾乎可以批量復制它。

runnable的一個例子是:

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

如果代碼抱怨需要從主線程運行,則需要使用First Acitivity中定義的Handler來從Runnable.發布startActivity()調用Runnable.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM