2013-08-30 51 views
0

我有一個Web瀏覽器應用程序。 AutoCompleteTextView充當Url文本框,並在應用程序啓動時獲取列表(Cursor Type)。 下面的代碼工作正常,但我不知道它是否正確使用AsyncTask或不。Android AsyncTask,從UI活動傳遞視圖

那麼,AutoCompleteTextView會凍結應用程序啓動嗎? 我通過Eclipse線程監視器監視線程,AsyncTask#1線程在完成時保持等待狀態。我該如何關閉線程?

代碼:

public class BrowserActivity extends StandOutWindow { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //Build the layout 
     LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
     View v = inflater.inflate(R.layout.activity_browser, frame, true); 
     AutoCompleteTextView txtUrl = (AutoCompleteTextView) v.findViewById(R.id.txtUrl); 

     //Run the async task 
     BrowserDataTask bdTask = new BrowserDataTask(); 
     bdTask.execute(txtUrl); 
    } 

    //A method belong to BrowserActivity class and reusable. 
    public Cursor getBrowserData() { 
     String[] projection = new String[] { "_id", Browser.BookmarkColumns.TITLE, 
       Browser.BookmarkColumns.URL }; 
     Cursor mCur = getContentResolver().query(android.provider.Browser.BOOKMARKS_URI, 
       projection, null, null, null);  
     return mCur; 
    } 

    //Sub Class of BrowserActivity 
    private class BrowserDataTask extends AsyncTask<AutoCompleteTextView, Integer, Cursor> 
    { 
     private AutoCompleteTextView m_acText; 

     @Override 
     protected Cursor doInBackground(AutoCompleteTextView...params) { 
      m_acText = params[0]; 
      return getBrowserData(); 
     } 

     @Override 
     protected void onProgressUpdate(Integer... progress) { 
      super.onProgressUpdate(progress); 
     } 

     @Override 
     protected void onPostExecute(Cursor result) { 
      //UrlAdapter, custome Cursor Adapter from other class. 
      UrlAdapter adapter = new UrlAdapter(BrowserActivity.this, result); 
      m_acText.setAdapter(adapter); 
     } 

    } 

} 

回答

1

爲什麼等待?

AyncTask使用ThreadPoolExecutor因此,他們可能不會被破壞,而是被保留下來,因爲破壞和重新初始化它們將是一個明確的浪費。如果你真的想關閉它,請撥打cancel(),這可能會有所幫助。

它會凍結應用程序嗎?

不,它不會。

此外,你永遠不會設置你的進度!

相關問題