animation师只能在Looper线程Android上运行

我正在尝试在任务完成时animation。 这里的问题是我得到这个错误信息:

android.util.AndroidRuntimeException: Animators may only be run on Looper threads at android.animation.ValueAnimator.cancel(ValueAnimator.java:1004) at android.view.ViewPropertyAnimator.animatePropertyBy(ViewPropertyAnimator.java:965) at android.view.ViewPropertyAnimator.animateProperty(ViewPropertyAnimator.java:921) at android.view.ViewPropertyAnimator.alpha(ViewPropertyAnimator.java:735) at com.design.zaton.prototypei.MainActivity$1$1.run(MainActivity.java:93) at java.lang.Thread.run(Thread.java:761) 

该应用程序工作正常以前具有相同的确切代码,但现在它根本没有。 我很困惑。

这是错误发生的地方:

 new Thread(new Runnable() { @Override public void run() { final String s = getGiphyViews(String.valueOf(mEdit.getText())); runOnUiThread(new Runnable() { @Override public void run() { result.setText(s); } }); loading.animate() .alpha(0) .setDuration(100); done.animate() .scaleY(1) .scaleX(1) .setDuration(300); } }).start(); 

错误概述了loading.animate()方法。

提前致谢!

Solutions Collecting From Web of "animation师只能在Looper线程Android上运行"

Looper线程是Android中的线程,永久循环(或直到你取消它们)。 他们与处理程序一起工作,将发布消息并发送到Looper线程。 animation师大量使用Looper线程,因为他们在重复的循环中执行他们的动作。 这允许animation师在按下“开始”之后不会阻止,因此您可以继续执行其他操作。

更复杂的事情,你最有可能在View对象上执行animation。 这些只能在主UI线程上运行(这恰好是它们中最大的Looper线程)。 所以,你不能像你正在尝试的那样在单独的线程上运行这些animation。

我认为,使用Handler有一个解决scheme 。 您可以使用postDelayed最小为100并运行您的animation任务。 在你的情况下,这将是:

 new Handler().postDelayed(new Runnable() { @Override public void run() { final String s = getGiphyViews(String.valueOf(mEdit.getText())); runOnUiThread(new Runnable() { @Override public void run() { result.setText(s); } }); loading.animate() .alpha(0) .setDuration(100); done.animate() .scaleY(1) .scaleX(1) .setDuration(300); } }, 100); 

我今天有这个问题,上面的工作解决了这个问题。 如果这个方法有问题,我很乐意听到任何人的消息。

 runOnUiThread(new Runnable() { @Override public void run() { //Your code } }); 

您必须在UI线程中执行代码

把代码放在哪里得到错误和做任何networking操作

 new Handler().post(new Runnable() { @Override public void run() { // add your code here } }); 

我认为你可以在你的活动中创build一个主处理程序实例并覆盖处理消息方法。 您可以在工作线程中保存处理程序引用。完成工作后,您可以使用处理程序发送消息,并在消息处理方法中接收消息。 从处理程序消息方法等开始animation…