[英]How to start a new activity after the service ends
所以我有兩個android活動(Activity 1( SignUpActivity ),Activity 2( RegisterActivity ))
第一個活動應該是在新用戶的情況下開始第二個活動(不是問題)
訣竅是我需要先調用某個服務。 此服務將調用某個服務器並獲取一些數據以提供它(RegisterActivity)
所以為了做到這一點,有一些可能的解決方案
不需要服務,我們可以從活動1發出HTTP請求。但是我已經有一個在SignUpActivity中擴展AsyncTask的類。 它有另一項工作(基本上是用戶簽名)。
我可以調用該服務然后調用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.