我正在尝试从Web应用程序中的实用程序类访问应用程序状态,但我不确定最好的方法.我寻找一个静态成员,但没有任何用处(我正在考虑HttpContext.Current的某些方面).
到目前为止我找到的最好的解决方案是在实用程序类中有一个成员,它将在Global.asax.cs的Application_Start事件中初始化(我可以从this.Application那里得到它)但是会有"某事"的风险"发生在那个引用上(我不关心正在重启的应用程序,因为我只是在寻找缓存功能)?
我知道这个话题已经讨论过,但是我一直看到相互矛盾的错误,而且我越来越迷失.
我只是想知道当我的应用程序在后台时会发生什么,并且它会收到推送通知.
我知道:
在前台 - 应用程序:didReceiveRemoteNotification:被调用,没有警报,徽章或声音.
未启动时 - 显示/播放警报,徽章和/或声音,如果用户点击通知的"查看/打开"(操作)按钮,则启动应用程序并调用application:didFinishLaunchingWithOptions:并且通知有效负载为传递,如果用户关闭通知并点击应用程序图标,则会调用相同的方法,但不会传递有关通知的信息.
而在背景 - 这是我困惑的地方.我需要知道在后台运行或暂停是否会产生影响,无论如何调用什么方法以及是否显示/播放警报,徽章和/或声音.
谢谢.
我是c#编程的新手,所以请记住:
我有一个内存数据对象,我需要在我的应用程序崩溃或关闭时保存信息.有没有办法确定性地或可靠地做到这一点?
我一直在寻找析构函数
~MyObjectName(){}
Run Code Online (Sandbox Code Playgroud)
终结者和Dispose(),
但据我所知,这些都不能可靠地做到我想要的吗?
目前我正在使用析构函数,它在我关闭程序时起作用,但这并不意味着它将在崩溃或总是工作.
我也应该看一下这些活动吗?
我的应用代表中有代码
application:didReceiveLocalNotification:
Run Code Online (Sandbox Code Playgroud)
每当我的应用程序在前台时,显示该本地通知的UIAlertView的方法.
如果我的应用程序在本地通知到达时在后台,则会向用户显示通知,并且可以通过选择启动应用程序.在这种情况下,我的应用程序来到我的App代表的前台
applicationWillEnterForeground:
Run Code Online (Sandbox Code Playgroud)
叫做.然后再次调用didReceiveLocalNotification方法,导致UIAlertView再次出现.但实际上,当应用程序处于后台时,用户已经有了警报,所以理想情况下我不希望再次显示此警报.
我可以看到,如果一个应用程序是由于本地通知而启动的话
application:didFinishLaunchingWithOptions:
Run Code Online (Sandbox Code Playgroud)
您可以检查密钥的启动选项的方法
UIApplicationLaunchOptionsLocalNotificationKey
Run Code Online (Sandbox Code Playgroud)
要知道本地通知是否导致您的应用程序启动,但是当用户与本地通知进行交互而刚刚返回到前台时,似乎没有找到此方法的方法.
检查我的applicationWillEnterForeground方法是否最近被调用似乎是一个讨厌这个问题的方法,或者类似于这个问题中给出的答案" iOS如何判断应用程序是运行前景还是后台? "将允许我检查
[UIApplication sharedApplication].applicationState
Run Code Online (Sandbox Code Playgroud)
从我的内心
application:didReceiveLocalNotification:
Run Code Online (Sandbox Code Playgroud)
方法.希望它能够及早收到,在这种情况下我的applicationState仍然不会被设置为UIApplicationStateActive.
或者有更好的解决方案吗?
干杯
application-state background-foreground ios uilocalnotification
我们已经申请了荷兰的一个城市,希望游客可以参观他们可爱的博物馆.
当他们到达博物馆的页面时,我们有一个小图标,他们按下并运送到谷歌地图,显示他们在哪里以及如何到达博物馆.
我们需要的是一个后退按钮,以便我们可以回到城市应用程序中的上一页.现在它打开谷歌地图并立即关闭应用程序.因此,当我完成他们的地图部分时,我必须关闭谷歌地图并重新打开我的应用程序并再次找到正确的页面.相当令人讨厌
是否有可能嵌入此页面,甚至可能使用谷歌地图?
假设用户正在使用我的Android应用程序,我有一个DialogFragment YourTanks
(它显示了你拥有的各种坦克!)
public class YourTanks extends DialogFragment implements View.OnClickListener
Run Code Online (Sandbox Code Playgroud)
再一次,用户真的在看那个"页面",看到他们的坦克等等.
他们接到电话或决定使用其他应用程序,可能是他们的日历,电子邮件等等.
请注意,当然,我的应用程序不会退出,它仍然以b/g运行
他们完成了其他应用程序.在Android的主屏幕或应用程序屏幕上,他们单击我的应用程序的图标.现在,我的应用程序再次出现,他们再次可以看到他们的彩色坦克等.
所以 - 我想知道他们已经打开了应用程序,我希望YourTanks对此保持警惕.
@Override
public void onStart ()
{
super.onStart();
Utils.Log("WE ARE IN onStart !!========");
Utils.Log("I think this means the user just 'opened' or 'reopened' the app.");
Utils.Log("Better ask on SO though.");
}
Run Code Online (Sandbox Code Playgroud)
事实上,这是做我所描述的最佳方式,或者,你是否必须在(或许/)活动水平或其他一些概念上做些什么?
令人惊讶的是,我真的无法找到任何关于此的信息.
(请注意,在iPhone上,您或多或少在整个应用程序单例中使用类似 - (void)applicationDidBecomeActive:(UIApplication*)应用程序.)
感谢您提供关于此的任何决定性信息!
在iOS上,我有几种方法可以知道用户在后台启动应用程序时从主屏幕启动了我的应用程序:
WatchKit是否有等效功能?如果没有,是否有健壮的替代方案?
我想在应用程序关闭或在后台运行一段时间(比如说5分钟)时,消除保存到NSUserDefaults所有字段中的所有变量.
我试图在applicationDidFinishLaunching的app委托中添加一行,如下所示:
if (UIApplicationStateBackground == TRUE) {
NSUserDefaults *profiles = [NSUserDefaults standardUserDefaults];
[profiles setObject:nil forKey:@"name1"];
[profiles synchronize];
}
Run Code Online (Sandbox Code Playgroud)
我还将这部分添加到applicationWillTerminate中:
NSUserDefaults *profiles = [NSUserDefaults standardUserDefaults];
[profiles setObject:nil forKey:@"name1"];
[profiles synchronize];
Run Code Online (Sandbox Code Playgroud)
这似乎都不起作用,我不知道如何设置'如果5分钟超过应用程序在后台,删除NSUserDefaults变量'的条件 - 任何帮助?
ios ×3
c# ×2
.net ×1
android ×1
asp.net ×1
caching ×1
crash-dumps ×1
destructor ×1
google-maps ×1
iphone ×1
multitasking ×1
watchkit ×1