android Asynctask thread.sleep?

时间:2015-04-19 11:53:43

标签: android android-asynctask thread-sleep

在我的应用程序中,当用户写错字符时,我的edittext变为红色然后它变成了写。实际上我正试图让红色闪烁。这是我的工作代码

 class BlinkTask extends AsyncTask<EditText, Boolean, Boolean>
{

    @Override
    protected Boolean doInBackground(EditText... params) {

        EditText et1=params[0];

        try {
            et1.setBackgroundColor(Color.RED);
            Thread.sleep(1000);

        } catch (InterruptedException e) {
            e.printStackTrace();
        }

       try {
           et1.setBackgroundColor(Color.WHITE);
       }
       catch (Exception e)
       {
           e.printStackTrace();
       }

        return true;
    }
}

但是当我拿到et1.setBackgroundColor(Color.WHITE); out-try-block block.It没有错误,但不幸的是myapp已经停止。我检查了loggat但没有看到任何内容。这是假代码  BlinkTask类扩展了AsyncTask     {

    @Override
    protected Boolean doInBackground(EditText... params) {

        EditText et1=params[0];

        try {
            et1.setBackgroundColor(Color.RED);
            Thread.sleep(1000);

        } catch (InterruptedException e) {
            e.printStackTrace();
        }


           et1.setBackgroundColor(Color.WHITE);



        return true;
    }
}

我不知道为什么它需要try-catch,尽管它没有错误。

还要ı想要为这个任务创建一个asynctask类是一个很好的解决方案或者其他什么都可以做。谢谢你

3 个答案:

答案 0 :(得分:1)

您应该使用animations来实现此目的。

答案 1 :(得分:0)

AsyncTask不在UI线程上运行,因此无法触及UI组件。但是这样做有一个技巧。

class BlinkTask extends AsyncTask<EditText, Integer, Boolean>
{

    private EditText et1;

    @Override
    protected Boolean doInBackground(EditText... params) {

        et1 = params[0];

        try {
            publishProgress(Color.RED);
            Thread.sleep(1000);

        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        try {
            publishProgress(Color.WHITE);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        return true;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
        et1.setBackgroundColor(values[0]);
    }
}

但说实话,在asynctask中更改edittext的背景颜色是个坏主意。使用时应该看看动画。

答案 2 :(得分:0)

我认为因为你现在在主线程的不同主题中,编辑文本是UIthread的一个元素,那么你必须在UIthread中使用你的代码。

你可以搜索“如何在java android中使用runonUIthread”。

希望这对你有所帮助。