- Аниматоры могут запускаться только на Looper threads Android
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Аниматоры можно запускать только на нитях Looper Android
- Аниматоры могут запускаться только на Looper threads Android
- Аниматоры можно запускать только в потоках Looper Android.
- 5 ответов
- «Animators may only be run on Looper threads» when raising ChangeCanExecute on Button command #4964
- Comments
- DanP93 commented Jan 11, 2019
- «Animators may only be run on Looper threads» when raising ChangeCanExecute on Button command
Аниматоры могут запускаться только на Looper threads Android
Я пытаюсь оживить что-то, когда задача завершена. Проблема здесь в том, что я получаю это сообщение об ошибке:
Приложение отлично работало с таким же точным кодом, но теперь его просто нет. Я действительно смущен.
Здесь, где происходит ошибка:
Ошибка описывает метод loading.animate() .
ОТВЕТЫ
Ответ 1
Я думаю, для этого использовалось решение, используя Handler . Вы можете использовать postDelayed до минимального значения как 100 и выполнять свои анимационные задачи. В вашем случае это будет:
У меня была эта проблема сегодня, и выше работа разрешила проблему. Я хотел бы услышать от кого-либо, если есть какие-либо проблемы с этим методом.
Ответ 2
Looper threads — это потоки в Android, которые надолго зацикливаются (или пока вы их не отмените). Они работают совместно с Handlers, которые будут отправлять и отправлять сообщения в потоки Looper . Аниматоры используют интенсивное использование потоков Looper, потому что они выполняют свои действия в повторяющихся циклах. Это позволяет аниматору не блокироваться после нажатия «запуска», чтобы вы могли продолжать выполнять другие действия.
Чтобы еще больше усложнить ситуацию, вы, скорее всего, выполняете анимацию на объектах View . Они могут запускаться только в основном потоке пользовательского интерфейса (который является самым большим потоком Looper ). Таким образом, вы не можете запускать эти анимации в отдельных потоках, как вы пытаетесь.
Ответ 3
Вы должны выполнить код в потоке пользовательского интерфейса
Ответ 4
Поместить код Где возникают ошибки и выполнение каких-либо сетевых операций
Ответ 5
Я думаю, вы можете создать экземпляр основного обработчика в своей активности и переопределить метод сообщения с дескриптором. вы можете сохранить цитату обработчика в своем рабочем потоке. Когда вы закончили работу, вы можете использовать обработчик для отправки сообщения, и вы получаете сообщение в методе сообщения с обработкой. Чтобы запустить анимацию из метода сообщения обработчика и так далее.
Источник
Аниматоры можно запускать только на нитях Looper Android
Я пытаюсь оживить что-то, когда задача выполнена. Проблема здесь, я получаю это сообщение об ошибке:
Раньше приложение работало нормально с тем же точным кодом, но теперь просто нет. Я действительно смущен.
Вот где происходит ошибка:
Ошибка описывает метод loading.animate() .
Я думаю, было решение для этого с использованием Handler . Вы можете использовать postDelayed в качестве минимального в качестве 100 и запускать анимационные задачи. В вашем случае это будет:
У меня была эта проблема сегодня, и работа над ней решила проблему. Я хотел бы услышать от кого-либо, если есть какие-либо проблемы с этим методом.
Потоки Looper являются потоками в Android, которые постоянно зацикливаются (или пока вы не отмените их). Они работают совместно с обработчиками , которые будут публиковать и отправлять сообщения в темы Looper . Аниматоры интенсивно используют потоки Looper, потому что они выполняют свои действия в повторяющихся циклах. Это позволяет аниматору не блокироваться после нажатия кнопки «Пуск», чтобы вы могли продолжать выполнять другие действия.
Чтобы еще больше усложнить ситуацию, вы, скорее всего, выполняете анимацию для объектов View . Они могут быть запущены только в основном потоке пользовательского интерфейса (который является самым большим потоком Looper из всех). Таким образом, вы не можете запускать эти анимации в отдельных потоках, как вы пытаетесь.
Источник
Аниматоры могут запускаться только на Looper threads Android
Я пытаюсь оживить что-то, когда задача завершена. Проблема здесь в том, что я получаю это сообщение об ошибке:
Приложение отлично работало с таким же точным кодом, но теперь его просто нет. Я действительно смущен.
Ошибка описывает метод loading.animate() .
Нити Looper – это потоки в Android, которые надолго зацикливаются (или пока вы их не отмените). Они работают вместе с Handlers, которые будут отправлять и отправлять сообщения потокам Looper . Аниматоры используют интенсивное использование потоков Looper, потому что они выполняют свои действия в повторяющихся циклах. Это позволяет аниматору не блокироваться после нажатия «start», чтобы вы могли продолжать выполнять другие действия.
Чтобы еще больше усложнить ситуацию, вы, скорее всего, выполняете анимацию на объектах View . Их можно запускать только в основном потоке пользовательского интерфейса (который, как оказалось, самый большой поток Looper из всех). Таким образом, вы не можете запускать эти анимации в отдельных потоках, как вы пытаетесь.
Я думаю, что для этого используется решение Handler . Вы можете использовать postDelayed до минимального значения 100 и запускать свои анимационные задачи. В вашем случае это будет:
У меня была эта проблема сегодня, и над работой решена проблема. Я хотел бы услышать от кого-либо, если есть какие-либо проблемы с этим методом.
Я думаю, вы можете создать экземпляр основного обработчика в своей активности и обработать метод сообщения с дескриптором. Вы можете сохранить цитату обработчика в своем рабочем потоке. Когда вы закончите работу, вы можете использовать обработчик для отправки сообщения, и вы получаете сообщение в методе сообщения с дескриптором. Чтобы запустить анимацию из метода сообщения обработчика и так далее …
Поставить код Где возникают ошибки и какие-либо сетевые операции
Вы должны выполнить код в потоке пользовательского интерфейса
Источник
Аниматоры можно запускать только в потоках Looper Android.
Я пытаюсь что-то оживить, когда задача выполнена. Проблема в том, что я получаю это сообщение об ошибке:
Раньше приложение работало нормально с тем же кодом, но теперь это не так. Я действительно смущен.
Вот где возникает ошибка:
Ошибка описывает метод loading.animate() .
5 ответов
Думаю, для этого есть решение с использованием Handler . Вы можете использовать postDelayed как минимум как 100 и запускать свои задачи по анимации. В вашем случае это будет:
У меня была эта проблема сегодня, и вышеупомянутая работа разрешила проблему. Я хотел бы услышать от кого-нибудь, есть ли какие-либо проблемы с этим методом.
Looper thread — это потоки в Android, которые постоянно повторяются (или пока вы их не отмените ). Они работают вместе с обработчиками, которые будут публиковать и отправлять сообщения на Looper потоков. Аниматоры интенсивно используют потоки Looper, потому что они выполняют свои действия в повторяющихся циклах. Это позволяет аниматору не блокироваться после нажатия кнопки «Пуск», чтобы вы могли продолжить выполнение других действий.
Что еще больше усложняет ситуацию, вы, скорее всего, выполняете анимацию для объектов View . Их можно запускать только в основном потоке пользовательского интерфейса (который оказывается самым большим потоком Looper из всех). Таким образом, вы не можете запускать эти анимации в отдельных потоках, как вы пытаетесь.
Я думаю, вы можете создать экземпляр основного обработчика в своей деятельности и переопределить метод сообщения дескриптора. Вы можете сохранить цитату обработчика в своем рабочем потоке. Когда вы закончите работу, вы можете использовать обработчик для отправки сообщения, и вы получите сообщение в методе обработки сообщения. Чтобы запустить анимацию из метода сообщения обработчика и так далее .
Вы должны выполнить код в потоке пользовательского интерфейса
Поместите код туда, где возникает ошибка и выполняются какие-либо сетевые операции
Источник
«Animators may only be run on Looper threads» when raising ChangeCanExecute on Button command #4964
Comments
DanP93 commented Jan 11, 2019
Found this bug on bugzilla that we are still experiencing in version 3.4.0.1009999 of Xamarin Forms.
«Animators may only be run on Looper threads» when raising ChangeCanExecute on Button command
Submitted by a community member on 2016-08-26 08:42 UTC
I have a view model with a command for a button. When I raise ChangeCanExecute method on Command the button flips from enabled to disabled, but I got a main thread exception.
I think the renderer should ensure things are done on the main thread, as that is touching the View element and it should not be the responsibility of the view model, IMHO.
System.Diagnostics.Debugger.Mono_UnhandledException_internal() in
System.Diagnostics.Debugger.Mono_UnhandledException(Android.Util.AndroidRuntimeException ex) in /Users/builder/data/lanes/3540/1cf254db/source/mono/mcs/class/corlib/System.Diagnostics/Debugger.cs:122
object.d54b8c39-4cf2-4565-8178-571c704bce52( arg0, arg1, arg2, arg3) in
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() in /Users/builder/data/lanes/3540/1cf254db/source/mono/external/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143
Java.Interop.JniEnvironment.InstanceMethods.CallVoidMethod(Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) in /Users/builder/data/lanes/3540/1cf254db/source/Java.Interop/src/Java.Interop/Java.Interop/JniEnvironment.g.cs:11643
Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod(string encodedMember, Android.Support.V7.Widget.AppCompatButton self, Java.Interop.JniArgumentValue* parameters) in /Users/builder/data/lanes/3540/1cf254db/source/Java.Interop/src/Java.Interop/Java.Interop/JniPeerMembers.JniInstanceMethods_Invoke.cs:26
Android.Views.View.set_Enabled(bool value) in /Users/builder/data/lanes/3540/1cf254db/source/monodroid/src/Mono.Android/platforms/android-23/src/generated/Android.Views.View.cs:5198
Xamarin.Forms.Platform.Android.AppCompat.ButtonRenderer.UpdateEnabled() in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\AppCompat\ButtonRenderer.cs:234
Xamarin.Forms.Platform.Android.AppCompat.ButtonRenderer.OnElementPropertyChanged(Xamarin.Forms.Button sender, System.ComponentModel.PropertyChangedEventArgs e) in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Platform.Android\AppCompat\ButtonRenderer.cs:113
Xamarin.Forms.BindableObject.OnPropertyChanged(string propertyName) in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Core\BindableObject.cs:137
Xamarin.Forms.Element.OnPropertyChanged(string propertyName) in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Core\Element.cs:369
Xamarin.Forms.BindableObject.SetValueActual(Xamarin.Forms.BindableProperty property, Xamarin.Forms.BindableObject.BindablePropertyContext context, bool value, bool currentlyApplying, Xamarin.Forms.BindableObject.SetValueFlags attributes, bool silent) in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Core\BindableObject.cs:581
Xamarin.Forms.BindableObject.SetValueCore(Xamarin.Forms.BindableProperty property, bool value, Xamarin.Forms.BindableObject.SetValueFlags attributes, Xamarin.Forms.BindableObject.SetValuePrivateFlags privateAttributes) in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Core\BindableObject.cs:378
Xamarin.Forms.BindableObject.SetValueCore(Xamarin.Forms.BindableProperty property, bool value, Xamarin.Forms.BindableObject.SetValueFlags attributes) in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Core\BindableObject.cs:324
Xamarin.Forms.Button.set_IsEnabledCore(bool value) in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Core\Button.cs:112
Xamarin.Forms.Button.CommandCanExecuteChanged(Xamarin.Forms.Command sender, System.EventArgs eventArgs) in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Core\Button.cs:172
Xamarin.Forms.Command.ChangeCanExecute() in C:\BuildAgent\work\aad494dc9bc9783\Xamarin.Forms.Core\Command.cs:77
The text was updated successfully, but these errors were encountered:
Источник