asyncTask不适合我

时间:2016-02-19 19:33:54

标签: android android-asynctask

我有一个IME服务类和一个长操作方法。我想在IME服务类中的asyncTask类中运行LongOperation任务。

     public class Myimeservice extends InputMethodService
        implements KeyboardView.OnKeyboardActionListene {
    //...
    //some code here....
    //...

    public void setDictionary(){
          //....
    }

private class LongOperation extends AsyncTask<String, Void, String> {

        private Myimeservice parent;

        public LongOperation(Myimeservice pim){
            parent = pim;
        }
        @Override
        protected String doInBackground(String... params) {
                Myimeservice tmp = new Myimeservice();
                tmp.setDictionary();
            return "Executed";
        }

        @Override
        protected void onPostExecute(String result) {
            //app.hideLoading();
        }

        @Override
        protected void onPreExecute() {
            //app.showLoading();
        }

        @Override
        protected void onProgressUpdate(Void... values) {}
    }

当我运行它时,应用程序被迫关闭。请帮帮我。

2 个答案:

答案 0 :(得分:1)

我认为错误发生在public void setDictionary()方法的某处。 我假设您正在操作绑定到UIThread / MainThread的变量,应用程序将崩溃,因为doInBackground在另一个Thread上。

而是让setDictionary()方法返回字典并返回它而不是&#34;执行&#34;在doInBackground()

这将调用在UIThread / MainThread上运行的onPostExecute(Object result)

这样的事情:

private class LongOperation extends AsyncTask<String, Void, Dictionary> {

@Override
protected Dictionary doInBackground(String... params) {
     Myimeservice tmp = new Myimeservice();
     Dictionary dict = tmp.setDictionary();
     return dict;
}

@Override
protected void onPostExecute(Dictionary result) {
                //do what ever you meant to do with it;
}

}

如果您不期待任何结果,您可以这样做:

AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                 tmp.setDictionary();
            }
        });

答案 1 :(得分:0)

我使用Runnable而不是AsyncTask,问题解决了。

final Runnable r = new Runnable(){
        public void run(){
            setDictionary();
        }
    };

此代码位于onCreate()服务方法中。 坦克很多特里斯坦理查德。