python - 如何在后台模式下在android上的python kivy中启动服务?
问题描述
我需要为我在 android 上的应用程序提供服务来接收来自服务器的消息。我的应用程序代码:
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
import sys
import socket
import time, subprocess
from kivy.uix.label import Label
from jnius import cast
from jnius import autoclass
from kivy.context import get_current_context
class MyApp(App):
def build(self):
fl = FloatLayout()
try:
service = autoclass('org.test.myapp.ServiceMyservice')
mActivity = autoclass('org.kivy.android.PythonActivity').mActivity
service.start(mActivity, "")
except Exception as error:
fl.add_widget(Label(text=str(error), font_size=(30)))
def on_stop(self):
return True
if __name__ == '__main__':
MyApp().run()
此代码不会返回任何错误,但服务不会启动。服务代码:
import sys, socket, os, time, pickle
from jnius import autoclass, cast
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = 'example-78967.portmap.host'
port = 78967
s.connect((host,port))
s.send(('hello').encode('utf-8'))
我尝试在智能手机上启动此代码并且它有效,我收到了消息。这意味着,该服务没有启动,并且没有任何错误。我的服务位于service/main.py
. 在我添加的部分services
中: . 我还没有尝试在后台运行它。我该做什么?我希望你能帮助我。buildozer.spec
services = myservice:./service/main.py
解决方案
on_stop
方法使应用程序崩溃,当我删除它时,我的应用程序已经开始工作。
推荐阅读
- javascript - 如何在javascript中合并两个嵌套对象
- python - subprocess.call 出现问题,无法按预期工作
- xaml - Xamarin MasterPage - 在菜单中显示/隐藏分隔线
- javascript - 如何将脚本应用于所有模式弹出窗口
- python - Python范围替代
- swift - 如何将计算结果存储在 UserDefaults 中以显示在“结果”视图控制器中
- php - 如何为 Magento 2 做多个价格字段
- angular - 角度中的按钮单击事件问题
- xml - 将结构体作为参数传递给函数,并返回对应结构体的切片
- linq - 使用 Linq to sql 执行区分大小写的查询?