我正在獲取用戶在實現LocationListener的服務中的位置。在OnlocationChanged()
方法中,我創建了一個asynctask
類的實例,該實例將將值上傳到聯機數據庫。問題是,只要偵聽器調用OnlocationChanged()
方法,就會創建一個新的asynctask
實例,並且會減慢設備速度。我想要一個方法/機制來將asynctask
的實例限制爲最多 5.創建有限的AsyncTask實例
0
A
回答
0
它與java中的Thread Pools非常相似(here)。
public class MaxAsyncHandler {
private static MaxAsyncHandler instance = new MaxAsyncHandler();
ArrayList<Data> list;
int count;
int MAX = 5;
private MaxAsyncHandler() {
this.count = 0;
list = new ArrayList<Data>();
}
public int getCount() { return count; }
public int incCount() { count++; }
public static MaxAsyncHandler getInstance()
{
return instance;
}
public void createTask(Data data) {
if(count < MAX)
new AsyncTask(data); //
else
list.add(data);
}
// Call this method when an AsyncTask finishes
public void checkPool() {
if(list.size() > 0)
new AsyncTask(list.get(0)); //
}
}
PS:我使用了單例模式。
0
使用布爾變量isLoading並將其初始化爲false。
在AsynctTask內onPreExcecute使isLoading真實,onPostExecute使isLoading假
現在呼籲的AsyncTask之前,你只需要提出以下條件及其實現。我想這就是你想要的
if(!isLoading) new LongOperation()。execute(「」);
0
您可以從AsyncTask
繼承並創建自己的類,然後使用靜態變量來跟蹤實例編號。
public class MyAsyncTask<Params, Progress, Result> extends
AsyncTask<Params, Progress, Result> {
private static int COUNT = 0;
private static int LIMITATION = 5;
public MyAsyncTask() {
// TODO Auto-generated constructor stub
super();
COUNT++;
if (COUNT > LIMITATION) {
// TODO:
// FIXME:
throw new RuntimeException("no more than " + LIMITATION
+ " asyn task");
}
}
public static void resetCounter() {
COUNT = 0;
}
@Override
protected Result doInBackground(Params... params) {
// TODO Auto-generated method stub
return null;
}
/*
* (non-Javadoc)
*
* @see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
@Override
protected void onPostExecute(Result result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
/*
* (non-Javadoc)
*
* @see android.os.AsyncTask#onProgressUpdate(java.lang.Object[])
*/
@Override
protected void onProgressUpdate(Progress... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
}
相關問題
- 1. 如何創建AsyncTask實例
- 2. 創建新實例時,AsyncTask沒有執行兩次
- 3. AsyncTask實例
- 4. 創建實例
- 5. 創建實例
- 6. 創建實例
- 7. 防止多個asynctask實例或創建持久布爾值
- 8. GSON實例創建者創建的實例,但字段爲空
- 9. OWL API - 創建沒有實例的類
- 10. 實例創建具有軌道的TurboLink
- 11. 列表類的所有實例創建
- 12. 有關聯的實例創建 - Sequelize
- 13. PHP有趣創建類的實例
- 14. 有沒有辦法從基礎實例創建派生實例?
- 15. PowerMockito.whenNew沒有創建模擬實際實例創建
- 16. android asynctask創建
- 17. GLTF創建實例
- 18. 實例創建(JS)
- 19. 創建EC2實例
- 20. StructureMap創建實例
- 21. 創建此實例
- 22. Django模型繼承:創建現有實例的子實例(downcast)?
- 23. 基於現有實例創建類的新實例
- 24. 創建類的實例
- 25. 的Java創建實例
- 26. 創建的實例是空
- 27. 創建函數的實例
- 28. AS3.0:ACCES創建的實例
- 29. 創建類的實例
- 30. 創建CallbackManager.Factory.create()的實例;