android - 如何防止 kivy 应用程序在执行某些后端功能时变得无响应
问题描述
我有一个 kivy 应用程序,它需要在运行时的某个时间点下载互联网数据,问题是当下载数据的功能运行时应用程序变得无响应,有时可能需要几分钟才能下载数据。下载所需文件后它会继续正常工作,但是任何不知道此错误的人都会在应用程序无响应时轻松退出应用程序。
这是一些示例代码:
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
import datetime
from duka.core.utils import TimeFrame
import duka.app.app as import_data
class btnFloatie(FloatLayout):
def __init__(self):
btn = Button(text="Download files")
btn.bind(on_press=self.get_files)
self.add_widget(btn)
def get_files(self):
start_date = datetime.date(2020,02,02)
end_date = datetime.date(2020,03,02)
import_data(["AUDCAD"], start_date, end_date, 1, TimeFrame.H4, ".", True)
class MainApp(App):
def build(self):
return btnFloatie
MainApp().run()
我该怎么做才能使应用程序在下载数据时不会崩溃?
解决方案
您的数据下载是一个阻塞函数调用,因此一旦应用程序开始执行它,它就不会处理其他正常任务(检查输入、更新 gui),直到它完成。
简单的解决方案是在线程中进行下载。这意味着执行这些 gui 任务的主线程不会被阻塞,并且应用程序将保持响应。
推荐阅读
- java - 我需要每个线程都有一个守护线程吗?
- javascript - 将 dropzone 与 node.js 一起使用
- web - google_auth 和 Dart 2
- javascript - Javascript关闭窗口
- arangodb - 图形查看器功能请求
- sql - SQL 乘法案例计数
- angular - 使用 Angular Routing 渲染两个组件
- php - 嵌套的嵌入对象错误地水合为空(Doctrine2,php)
- .net - Teamcity Nuget 还原错误
- java - 如何防止 Java 8/Tomcat 7 对 Response.sendRedirect 上的 URL 路径进行 URL 编码