我一直在研究Android SDK平台,有点不清楚如何保存应用程序的状态.因此,考虑到'Hello,Android'示例的这种小型重新设计:
package com.android.hello;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloAndroid extends Activity {
private TextView mTextView = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTextView = new TextView(this);
if (savedInstanceState == null) {
mTextView.setText("Welcome to HelloAndroid!");
} else {
mTextView.setText("Welcome back.");
}
setContentView(mTextView);
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这对于最简单的情况就足够了,但无论我如何远离应用程序,它总是以第一条消息响应.
我确信解决方案就像覆盖onPause或类似的那样简单,但我已经在文档中捅了大约30分钟左右,并且没有找到任何明显的东西.
我正在忙着将Web应用程序转换为MVC,并将一些信息保存到跨多个租户/帐户使用的应用程序变量中,以使事情更有效率.
我意识到MVC的目的是让事情尽可能无状态,Sesion State显然在MVC中存在并存在,但我们不想将Application转换为Session变量,因为我们宁愿拥有更全局和更安全的东西.MVC应用程序是否具有应用程序变量?我看过一些使用缓存的例子?这是现在的标准吗?与应用程序/会话状态相比,这是多么强大/安全?
如果我有一个标准的ASP.NET应用程序,那么使对象静态而不是将对象实例置于Application状态之间有什么区别吗?
根据我的理解,这两个对象都存在于应用程序域的ONCE.
其次,对于ASP.NET站点,如果在引用的dll中有静态对象会发生什么.它也是app域的一部分,所以它总是存在一次?
试图决定(对于我的应用程序)在onPause()中保存什么以及在onSaveInstanceState()中保存什么,我梳理了整个SO以获取提示和明确的指导.
如果我理解正确,onSaveInstanceState()最适合保存"运行时更改"或"当前状态"(无论这意味着什么),而onPause()最适合保存"持久状态"(无论这意味着什么).
我仍然难以确定我的申请中的内容构成"持久状态"与"当前状态".例如,虽然用户偏好显然是持久的,但是onPause()当用户更改它们时,Android UI框架总是自动保存它们时是否需要保存它们?
类数据成员是否需要保存在onSaveInstanceState()中?我是否需要为我的应用程序中的每个类执行此操作?
我很迷惑.
你能带来真实世界的例子,说明必须保存的内容onPause()和必须保存的内容onSaveInstanceState()吗?除了设备配置更改,即.
-
在我的问题得到解答后,一些新的见解:
android application-state activity-lifecycle onpause android-activity
会话状态,页面生命周期中的应用程序状态在哪里?
我对这两个州有点困惑.以下是我的理解;
当应用程序处于后台并且如果您
"Application does not run in background"在App plist文件中设置为NO,则App继续在后台运行.在挂起模式下,App保留在内存中但不执行代码!系统在移动到Suspended状态时不会通知App,并在内存不足的情况下从内存中清除App以为前台Apps创建空间.
我的理解是否正确?如果是这样,那么当App在后台运行并执行代码时,为什么不在控制台上打印我的NSLog?我的TCP套接字连接实际发生了什么,我不断从服务器获取数据?为什么我们需要Suspended状态无论如何系统最终会在低内存情况下从内存中清除App.App从暂停状态变为活跃状态还是重新开始是否有任何区别?
我想知道我的应用何时暂停?在一定时间内未被激活或被用户终止的状态.我需要这个,因为我需要关闭一个Web套接字的连接.我想在应用程序处于后台状态时保持连接处于活动状态.
我该怎么做呢?
谢谢
编辑:这不是一个重复的问题,其他问题是关于应用程序不再活动时,我想知道该应用程序已被终止.
我们的应用程序是经典的asp和asp.net的组合.我们可以在asp.net中定义的经典asp中访问相同的应用程序变量.
会话是每个浏览器(通过cookie确定),但是什么时候"应用程序"开始和结束,以及IIS如何知道何时请求是同一个"应用程序"实例的一部分(如果不是通过cookie完成的话)会议的方式相同)?
我想生成一个随机的salt值并将其置于Application状态.
现在,我正在使用Web场,因此每台计算机的应用程序状态将不同.我也不想购买分布式状态农场应用程序.
那么..有什么解决方案呢?我以为我可以在代码或web.config文件中对其进行硬编码..但这意味着eva的相同盐...不是很安全.
有人有什么建议吗?
记住 - 我在所有机器上都使用了一个独特的键(例如guid).也许配置文件是唯一的方法?
android ×2
asp.net ×2
background ×2
asp.net-mvc ×1
c# ×1
iis ×1
ios ×1
ios5 ×1
objective-c ×1
onpause ×1
salt ×1
session ×1
suspend ×1
web-farm ×1