0

Web ブラウザ アプリケーションがあります。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 に答える