我有一个应用程序,其功能A应该每分钟在后台运行.功能A是应用程序应该连接到数据库,读取一些数据然后获取设备的当前位置,并根据它们检查条件,如果条件为真,它应该向用户发送状态栏通知,以便用户点击通知,将显示应用程序的用户界面并发生一些事情.
这个后台任务应该每分钟都运行一次,无论应用程序是否被使用,关闭,终止(例如facebook或Whatsapp向我们显示通知,无论它们是否在应用程序堆栈中).
现在我已经搜索并发现Android提供Job Scheduler,后台服务,AlarmManager和处理程序.
但是我读到的越多,这些陈述对我来说就越矛盾.
android background-process alarmmanager android-handler android-jobscheduler
首先,我知道只支持voip,音频和位置应用程序在后台运行,并且它们将在播放音频或使用位置服务等时运行.
我想知道的是,如果有办法让我的应用程序在后台运行完全正常运行,那么对电池寿命的影响无关紧要.
这样,我的应用程序的用户可以从设置中进行选择,以便随时随地保持应用程序,并且只需要他想要的时间.例如,如果他正在等待需要应用程序运行的内容,则在收到消息后,他可以关闭保持活动功能.
我不知道这是否可行,但我读过一些帖子,但不幸的是他们没有说如何=(
更新:在本教程中,我发现Acrobits在Apple Store上有两个应用程序"可以强制应用程序保持活动并在后台唤醒".那么有办法做到这一点吗?
我的应用程序启用了后台获取背景模式并且我验证了plist包含适当的获取模式.
我还配置了如下间隔:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum);
return true;
}
Run Code Online (Sandbox Code Playgroud)
我已经添加了处理程序如下:
func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
// Get some new data here
completionHandler(UIBackgroundFetchResult.NewData);
}
Run Code Online (Sandbox Code Playgroud)
我尝试去调试 - >模拟背景提取,但不管它从未进入过什么performFetchWithCompletionHandler.我还尝试在一个方案下运行应用程序,该方案选中了"由于后台获取事件而启动"选项.在这种方案下运行只需在模拟器中像往常一样启动应用程序而不需要调用performFetchWithCompletionHandler.
有任何想法吗?
谢谢!
编辑:这似乎正在影响我的应用程序的发布版本,所以它可能不会被隔离到模拟器.我正在运行Swift 1.2.
编辑2:我的错误报告刚刚关闭,因为它是另一个错误报告的副本,概述了同样的问题.仍然没有确认问题与模拟器隔离的信息.
编辑3:没有提到Xcode 6.4 Beta 2发行说明中的修复程序.:-(
当创建一个新的资源,它需要做一些冗长的处理前的资源准备好了,我怎么发送处理掉到背景的地方也不会撑起当前请求或其他流量到我的web应用程序?
在我的模型中:
class User < ActiveRecord::Base
after_save :background_check
protected
def background_check
# check through a list of 10000000000001 mil different
# databases that takes approx one hour :)
if( check_for_record_in_www( self.username ) )
# code that is run after the 1 hour process is finished.
user.update_attribute( :has_record )
end
end
end
Run Code Online (Sandbox Code Playgroud) 假设我有一个将targetSDKVersion设置为26的应用程序的小部件.此小部件需要100毫秒到10秒才能更新.大部分时间都在1s以下.在Android O之前,如果在我的AppWidgetProvider上调用了onUpdate(),我可以启动后台服务来更新这个小部件.但是,如果您尝试该行为,Android O将返回IllegalStateException.启动前台服务的显而易见的解决方案似乎是一种极端的措施,可以在99%的时间内在10秒以内完成.
可能的解决方案
我个人并不喜欢上述任何一种解决方案.希望我错过了一些东西.
(更令人沮丧的是,我的应用程序已经被系统调用onUpdate()加载到内存中.我没有看到如何将我的应用程序加载到内存中以调用onUpdate(),但后来没有给我的应用程序1s更新小部件UI线程正在为任何人节省电池寿命.)
multithreading android widget background-process android-8.0-oreo
我的.bash_profile文件中有2个别名,包含:
alias chrome="/Applications/Google\\ \\Chrome.app/Contents/MacOS/Google\\ \\Chrome"
alias chromex="chrome --disable-web-security"
Run Code Online (Sandbox Code Playgroud)
但是在运行时,它会打开Chrome但仍然保持终端窗口......一旦我关闭终端窗口,它也会关闭chrome.
有没有办法让它在后台运行?
我记得我用这个用于thinweb服务器thin start -d或者thin start --daemonize?
谢谢
除了詹姆斯回答,我还找到了nohup命令行,这使我可以退出终端而没有问题,这是一个混合,通过附加&到nohup命令:
$ nohup chromex &
Run Code Online (Sandbox Code Playgroud)
默认输出将写入nohup.out文件
要停止我可以运行的作业ps ax,通过正确的命令找到PID然后kill -9 PID
在Android上,当我查看"设置" - >"应用程序"时,在"运行"选项卡下,我可以看到内存被切入到部分:"已用内存"和"无内存",应用程序也被放入进入"二手记忆",或"无记忆"."无内存"部分中的应用程序被标记为"缓存后台进程".
那么,什么是"缓存后台进程"?它们仍然在内存中,而不是切换到"磁盘"(就像台式机/笔记本电脑那样),对吧?当用户选中其中一个"缓存的后台进程"时,它会立即显示,因为它仍在内存中,就像正在运行的进程一样,对吧?
Android在"缓存"应用程序时会做什么?
我已经尝试了各种方法来实现这一目标,但我的服务最终会被杀死.
我想用AlarmManager每隔一小时触发一次课.即使设备处于休眠状态,它也应该发出闪烁的LED警报,振动或声音.无论如何,它应该永远运行.
我注意到Whatsapp一直在运行,即使我杀死所有正在运行的应用程序并清除内存,让设备进入睡眠状态,但仍然Whatsapp接收消息并提醒我.他们是怎么做到的?我想对我的应用做同样的事情.
我正在开发一个销售点应用程序,需要非常好的同步机制.我们有Magento数据库.安卓设备有SQLite本地Db.现在我们需要以下列方式进行同步:
本地------同步到--------------->服务器(向上同步)
服务器------同步到--------------->本地(向下同步)
有两件事:
1)写(如何保重?)
对于我在本地进行的每个更改,它将直接将本地同步到服务器
2)回写(如何保养???)
每当服务器发生变化时,我们都需要将所有本地服务器与服务器同步.
因此,任务是:识别服务器更新
并同步我们的当地人.就像有4个设备在商店中运行,我们通过一个设备添加了一个新客户.现在我希望其他三个设备本地数据库也更新了有关该客户和服务器的信息也已更新.
我听说过后台线程并在一段时间后运行线程.但是,这样做的最佳方法是什么,不会影响应用程序.此外,所有Big Retail商店都使用同步过程.他们用的是什么?
任何帮助表示赞赏.
android synchronization background-process point-of-sale android-syncadapter
我有一个Django网站,一个页面有一个按钮(或链接),点击它将启动一个有点长时间运行的任务.显然,我想将此任务作为后台任务启动,并立即将结果返回给用户.我想使用一种简单的方法实现这一点,这种方法不需要我安装和学习像Celery这样的全新消息传递架构.我不想用芹菜!我只想使用一种简单的方法,我可以设置并在接下来的半小时左右运行.是不是有简单的方法在Django中执行此操作而无需添加(另一个)第三方程序包?
android ×5
alarmmanager ×2
arguments ×1
asynchronous ×1
daemon ×1
deferred ×1
django ×1
ios ×1
ios4 ×1
iphone ×1
keep-alive ×1
objective-c ×1
python ×1
ruby ×1
service ×1
swift ×1
widget ×1
xcode ×1