Android MultiThreading with TextWatcher

拟墨画扇 提交于 2020-04-16 04:58:05

问题


I'm fairly new to Android development and am currently working on an app that allows people to type text into a box and the text is displayed on a Bitmap on screen.

I have a text box in the activity that listens for changes. Each time you type text it calls functions to figure out how to best format the text on the image, then updates the image with the new text. It works fine for just a little bit of text, but when there's a lot, the calculations become slower and the device begins to freeze up, making typing nearly impossible.

Is there a way I can run the calculations in the background so that typing in the box is unaffected by the image updating? I'm thinking that using multiple threads would be useful, but don't know enough about threading to get it functioning.

Here's my code:

public class PicTextWatcher implements TextWatcher {
    ...
    public void afterTextChanged(Editable editable) {
        pic.setText(editable.toString());         //This function is relatively slow
        pic.writeText();                          //This function is very slow
        imageView.setImageBitmap(pic.getImage()); //This doesn't need to happen every keystroke, only when the other functions have completely finished
    }
}

Thanks in advance, MrGrinst


回答1:


You can use AsyncTask to do things in the background

public void afterTextChanged(final Editable editable) {
    new AsyncTask<Void, Void, Void>() {
        protected Void doInBackground(Void... params) {
            pic.setText(editable.toString());
            pic.writeText();
            return null;
        }
        protected void onPostExecute(Void result) {
            imageView.setImageBitmap(pic.getImage());
        }            
    }.execute();
}

You have to remember that now pic.setText(editable.toString());pic.writeText(); may be called simultaneously multiple times if the user typing fast and writetext is slow.



来源:https://stackoverflow.com/questions/22929113/android-multithreading-with-textwatcher

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!