0

我有一个网络浏览器应用程序。AutoCompleteTextView 充当 Url 文本框,并在应用程序启动时获取列表(光标类型)。下面的代码运行良好,但我不知道使用 AsyncTask 是否正确。

那么,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);
        } 

    }

}
4

1 回答 1

1

为什么要等?

AyncTask使用ThreadPoolExecutor,因此你他们可能不会被销毁,而是保留,因为销毁和重新初始化它们将是一种明确的浪费。如果您真的想关闭它,请致电cancel()它,这可能会有所帮助。

它会冻结应用程序吗?

不,不会的。

此外,你永远不会设定你的进步!

于 2013-08-30T06:34:49.320 回答