2013-08-30 50 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(),这可能会有所帮助。

它会冻结应用程序吗?

不,它不会。

此外,你永远不会设置你的进度!

相关问题