我正在尝试实施超时通知。这就是我想要做的。如果应用程序进入后台状态,5 分钟后它应该警告用户应用程序将被注销。在这个通知之后,如果用户打开应用程序,它应该要求输入密码,如果用户输入正确的密码,它应该检索他 5 分钟前离开的屏幕。我的问题是我无法保存用户留下的活动以便在输入密码后进行检索。这是我到目前为止所做的:我在 onSaveInstanceState() 方法中添加了一个倒计时,并创建了一个当前意图的实例。然后在 TimeOutActivity 中,我定义了一个名为 savedActivity 的属性,以便在该实例中传递当前活动。
private boolean isTimedOut;
private TimeOutActivity timOutActivity;
private CountDownTimer timer;
@Override
protected void onSaveInstanceState(Bundle state)
{
super.onSaveInstanceState(state);
if (timOutActivity == null)
{
timOutActivity = new TimeOutActivity();
timOutActivity.setIntent(new Intent(getApplicationContext(), TimeOutActivity.class));
**timOutActivity.savedActivity = this;**
initializeTimer();
}
}
private void initializeTimer()
{
timer = new CountDownTimer(60000, 1000)
{
public void onTick(long millisUntilFinished)
{
if (millisUntilFinished / 1000 == 55)
{
showSignOutWarning();
isTimedOut = true;
}
}
public void onFinish()
{
// Push local notification
isSignedOut = true;
}
}.start();
}
然后在 onStart() 方法中我添加了以下代码:
@Override
public void onStart()
{
super.onStart();
if (isTimedOut)
{
// Load timedOut activity
startActivity(timOutActivity.getIntent());
isTimedOut = false;
}
}
但是当我想检索 TimeOutActivity 中的活动时,我的属性 (savedActivity) 为空。我究竟做错了什么?有没有更好的方法来保存当前活动?
2014 年 10 月 31 日更新 我定义了一个名为:App.java 的类,它扩展了应用程序。通过这个类,我可以使用它们的 setter 和 getter 定义全局变量。就像下面这样
public class NGVApp extends Application
{
private WebView webView;
public WebView getWebView()
{
return webView;
}
public void setWebView(WebView webView)
{
this.webView = webView;
}
}
然后在 Application 标签的 AndroidManifest.xml 中我添加了这个
android:name="your.app.bundle.name.App"
然后在我的 WebViewActivity onStop() 方法中,我将 webView 实例设置如下:
((App) this.getApplication()).setWebView(webView);
最后在 onCreate() 方法中我添加了:
@Override
protected void onCreate(Bundle savedInstanceState)
{
if(((NGVApp) this.getApplication()).getSavedInstanceBundle() != null)
{
savedInstanceState = ((NGVApp) this.getApplication()).getSavedInstanceBundle();
}
}
我可以成功获取 webView 的实例,它不再为空,但它不包含 webView 内容(用户在超时之前交互的内容)有什么想法吗?