Bil*_*oba 1 python android garbage-collection weak-references kivy
所以这是我的错误代码我认为这个错误有一些困难,我查看了论坛但找不到。
而且...我的手机上有错误(使用kivy launcher python 3,当我使用 buildozer 构建时)但我的电脑上没有错误(ubuntu 18.0.4 和 windows 10) 据我了解,错误来自垃圾删除引用的收集器,并且代码尝试在垃圾收集器之后访问该引用。但我不确定我是否真的了解垃圾收集器
我试过的:
id: id.__self__
Run Code Online (Sandbox Code Playgroud)
在我的 kv 文件中
self.refs = [
self.id.__self__,
self.id.__self__]
Run Code Online (Sandbox Code Playgroud)
- 使用 ErrorHandler 来处理错误,但错误永远出现
我认为导致错误的原因,但我不知道如何解决:
我用来向服务器发送请求的时钟,但我不知道为什么(self.requestClient 是一个发送请求的函数):
C = Clock.schedule_interval(self.requestClient, 5)
kivy 时钟文档中的此信息:
重要的
回调是弱引用:您负责保持对原始对象/回调的引用。如果您不保留引用,则 ClockBase 将永远不会执行您的回调
错误 :
[ERROR ] Exception catched by ExceptionHandler
05-07 11:27:45.694 2788 2823 I python : Traceback (most recent call last):
05-07 11:27:45.694 2788 2823 I python : File path/kivy-launcher/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/launcher/kivy/core/window/window_sdl2.py", line 747, in mainloop
05-07 11:27:45.694 2788 2823 I python : File "/path/kivy-launcher/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/launcher/kivy/core/window/window_sdl2.py", line 479, in _mainloop
05-07 11:27:45.694 2788 2823 I python : File "/path/kivy-launcher/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/launcher/kivy/base.py", line 339, in idle
05-07 11:27:45.694 2788 2823 I python : File "/path/kivy-launcher/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/launcher/kivy/clock.py", line 591, in tick
05-07 11:27:45.694 2788 2823 I python : File "kivy/_clock.pyx", line 384, in kivy._clock.CyClockBase._process_events
05-07 11:27:45.694 2788 2823 I python : File "kivy/_clock.pyx", line 414, in kivy._clock.CyClockBase._process_events
05-07 11:27:45.694 2788 2823 I python : File "kivy/_clock.pyx", line 412, in kivy._clock.CyClockBase._process_events
05-07 11:27:45.694 2788 2823 I python : File "kivy/_clock.pyx", line 154, in kivy._clock.ClockEvent.tick
05-07 11:27:45.694 2788 2823 I python : File "kivy/_clock.pyx", line 86, in kivy._clock.ClockEvent.get_callback
05-07 11:27:45.694 2788 2823 I python : File "/path/kivy-launcher/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/launcher/kivy/weakmethod.py", line 56, in is_dead
05-07 11:27:45.694 2788 2823 I python : ReferenceError: weakly-referenced object no longer exists
Run Code Online (Sandbox Code Playgroud)
谢谢阅读 !
官方文档(Kv 语言编程指南)说要id_name: id_name.__self__
在 KV 代码中添加“强”引用,但不清楚在哪里需要这样做。更重要的是,它没有ReferenceError: weakly-referenced object no longer exists
为我解决错误。
什么做的工作是迫使Buildozer使用特定版本hostpython3
加入这个到requirements
了buildozer.spec文件的行:
python3==3.7.5, hostpython3==3.7.5
Run Code Online (Sandbox Code Playgroud)
另一个注意事项:在将上述内容添加到 之后requirements
,我返回并删除了所有__self__
引用,它仍然可以正常工作,因此显然 Kivy KV 语言不再需要这些。
2020 年 5 月 19 日更新:据报道,此错误已在 Kivy 2.0 中修复。