由于未知原因,当我在最近的菜单中杀死我的应用并尝试再次启动它时,我再次出现的最后一个屏幕,设备被冻结。我需要做的是重新启动,之后再次启动应用程序......
或者,如果我想在最近没有重启的情况下重新启动我的应用程序,我必须在移动终端中键入此命令
killall myapp
之后,如果我尝试从主屏幕启动我的应用程序,我的应用程序正常运行...
我想知道的是如何检测用户何时使用主页按钮退出应用程序,从而启动发送killall命令的NSTask?我知道Apple不允许使用NSTask,但这是一个越狱应用程序,不打算在Apple Store上发布。
此错误也让我感到无聊...在viewDidLoad我有几个NSTask和方法来检查目录是否存在。你是否认为这些东西可以禁止应用程序在最近杀死后重新启动并冻结设备?或者这是因为应用程序以root用户身份运行,特别是允许设备在这种情况下重新启动应用程序?
提前感谢您的帮助!
答案 0 :(得分:1)
首先,我想指出使用NSTask
并不总是答案。您可以使用NSFileManager
。管理文件和目录,您可以使用exit(0)
来终止您的流程。
就您的实际问题而言,您的应用程序是否以root身份运行?当应用程序被iOS告知关闭时,SpringBoard会向它们发送SIGSTOP
信号。由于SpringBoard作为移动设备运行,因此这些信号由移动用户发送,这意味着根应用程序将不会接收它们。这意味着每当根应用程序被告知退出时,它只会忽略该请求并继续执行。要解决此问题,可以更改Info.plist中的一个键。
继续将UIApplicationExitsOnSuspend
设置为Info.plist中的布尔true
,看看是否能解决您的问题。
答案 1 :(得分:0)
好的第一个问题我发现了如何:我已经将一个NSTask方法放入didEnterBackground(AppDelegate类)中,当用户退出应用程序时杀死应用程序
对于第二个问题,我真的不知道......我已经删除了放入viewDidLoad的方法,看看是否是问题的原因但是没有,只要我在最近杀了应用程序并尝试为了重新启动它,设备冻结..因为viewDidLoad方法中没有任何内容,我认为问题是由root权限引起的...... DidEnterBackroung中的NStask解决了这个问题