程序自启动及后台持续运行的研究(voip和GPS方式)
1,voip方式
1)首先要修改应用的plist配置,添加下面的设置:
Application does not run in background: NO
Required background modes: VOIP
注:添加这些配置之后,程序重启解锁就会自动运行application:
didFinishLaunchingWithOptions方法。
2)主要测试代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
__block UIBackgroundTaskIdentifier background_task;
background_task = [application beginBackgroundTaskWithExpirationHandler:^ {
//打开后台运行任务
}];
static dispatch_queue_t _queue ;
_queue = dispatch_queue_create("sddfgfgwerty456567fre4ghghkjdsfbnjfrtyrt", DISPATCH_QUEUE_SERIAL);
dispatch_async(_queue, ^{
while(TRUE)
{
//打印进程id
NSLog(@"processID = %d++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++CurrentThread = %@",[SSProcessInfo processID],[[NSThread currentThread] description]);
[NSThread sleepForTimeInterval: 5]; //wait for 15 min
}
});
sleep(1);
return YES;
}
注:程序测试必须真机下,观察log信息用Xcode上自带的Organizer工具。
经过分析log信息,发现processID过一段时间就会变,说明程序运行一段时间就会被kill掉,然后程序会自动重启。虽然达到了持续运行的目的,但是不符合程序持续运行要求。
2,GPS方式
1)首先要修改应用的plist配置,添加下面的设置:
Application does not run in background: NO
Required background modes: App registers for location updates
添加这两项之后可以保证程序在后台运行
2)主要测试代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([CLLocationManager significantLocationChangeMonitoringAvailable])
{
[self.locationManager startUpdatingLocation];
}
else
{
NSLog(@"Significant location change monitoring is not available.");
}
return YES;
}
- (CLLocationManager *)locationManager
{
if (_locationManager == nil) {
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
if([CLLocationManager locationServicesEnabled])
{
NSLog(@"无限运行................................................");
//这个分支进入后台后,运行时间和前台一样,是无限的
[_locationManager startMonitoringSignificantLocationChanges];
_locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
_locationManager.distanceFilter= 1;
_locationManager.pausesLocationUpdatesAutomatically = NO;
_locationManager.activityType = CLActivityTypeAutomotiveNavigation;
[_locationManager startUpdatingLocation];
}
}
return _locationManager;
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
while (true) {
[NSThread sleepForTimeInterval:1];
NSLog(@"processID = %d++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++CurrentThread = %@",[SSProcessInfo processID],[[NSThread currentThread] description]);
[self.locationManager allowDeferredLocationUpdatesUntilTraveled:CLLocationDistanceMax timeout:10];
}
}
注:程序测试必须真机下,观察log信息用Xcode上自带的Organizer工具。
经过分析log信息,发现processID不会变,说明程序能够持续运行。
程序自启动及后台持续运行的研究(voip和GPS方式)的更多相关文章
- spring boot jar 进程自动停止,自动终止,不能后台持续运行
第一次部署spring boot 到linux上,用命令java -jar **.jar,发现应用自动退出,进程停止了.后来发现要不挂断的执行命令,忽略所有的挂断信号,用以下命令解决 nohup ja ...
- Jenkins构建部署jar/war后,服务无法在后台持续运行的解决方案
jenkins中自动构建helpcenter.jar文件,然后以在server上以shell脚本的形式启动jar服务.jenkins构建后,手动执行sh脚本,服务启动异常.但jenkins结合shel ...
- 编写shell脚本,使用 nohup 让springboot 项目在后台持续运行
1.将springboot项目打成jar放在linux的某个目录下. 2.新建一个nohup.log文件. 3.使用vi命令新建一个start.sh文件并写下以下内容: #!/bin/sh nohup ...
- nodejs服务后台持续运行三种方法
一.利用 forever forever是一个nodejs守护进程,完全由命令行操控.forever会监控nodejs服务,并在服务挂掉后进行重启. 1.安装 forever npm install ...
- Xamarin 后台持续定位与提示
IOS后台持续运行对于c#程序员不懂得ios后台机制的是存在一定困扰的.特别是ios9过后对后台和安全进行了更严格的限制 好了废话不多说 一 设置info.plist权限信息 参考: 后台模式:htt ...
- ios后台程序持续运行方法
iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的.在后台时,程序会受到系统的很多限制,这样可以提高电池的使用和用户体验.但是有很多社交类的软件,如果因为它在后台就不能刷新到新的数据的话 ...
- iOS开发:后台运行以及保持程序在后台长时间运行
第一部分 1.先说说iOS 应用程序5个状态: 停止运行-应用程序已经终止,或者还未启动. 不活动-应用程序处于前台但不再接收事件(例如,用户在app处于活动时锁住了设备). 活动-app处于“使用中 ...
- ios程序后台继续运行
1.图标右上角显示消息个数 if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) { UIUserNotificati ...
- Swift - 让程序挂起后,能在后台继续运行任务
1,程序的挂起和退出 由于iOS设备资源有限.当用户点击了home键,或者另一个应用程序启动了.那么原先那个程序便进入后台被挂起,不是退出,只是停止执行代码,同时它的内存被锁定.当应用程序恢复时,它会 ...
随机推荐
- JavaScript实现冒泡排序、快速排序、插入排序
JavaScript实现冒泡排序.快速排序.插入排序 时间:2014-01-09 18:05:51 来源: 作者:胡晗 冒泡排序的基本思想:所谓冒泡就是泡泡一个一个往上冒,让体积最轻的泡泡浮在最上 ...
- API 进程、线程函数
CancelWaitableTimer 这个函数用于取消一个可以等待下去的计时器操作 CallNamedPipe 这个函数由一个希望通过管道通信的一个客户进程调用 ConnectNamedPipe 指 ...
- Python 2.7教程
参考:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000
- 使用MediaRecorder录制视频短片
MediaRecorder除了可用于录制音频之外,还可用于录制视频,使用MediaRecorder录制视频与录制音频的步骤基本相同.只是录制视频时不仅需要采集声音,还需要采集图像.为了让MediaRe ...
- 使用MediaRecorder录制音频
手机一般都提供了麦克风硬件,而Android系统就可以利用该硬件来录制音频了. 为了在Android应用中录制音频,Android提供了MediaRecorder类,使用MediaRecorder录制 ...
- js基础之弹性运动(四)
一.滑动菜单.图片 var iSpeed=0;var left=0;function startMove(obj,iTarg){ clearInterval(obj.timer);//记得先关定时器 ...
- POJ 1753 Flip Game 状态压缩,暴力 难度:1
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4863 Accepted: 1983 Descript ...
- hdu 4628 Pieces
http://acm.hdu.edu.cn/showproblem.php?pid=4628 状态压缩DP 时间复杂度应该是 16*(2^32) 但是运行时要远小于这个数 所以加一定剪枝就可以过 代码 ...
- 二模 (11) day1
第一题: 题目大意:用邻接矩阵给出一棵树(边权非负)上N个节点相互之间的最短路距离,求这棵树所有边权的和. 解题过程: 1.暂时还没想出来,待AC. 第二题: 题目大意:给出一些单词,然后建立Trie ...
- javascript photo1