【发布时间】:2011-03-10 09:20:13
【问题描述】:
我有一个用户登录和注销的应用程序。在登录时,它会告诉我的数据库用户在线。我遇到的问题是,当用户有一段时间不使用该应用程序并且处理器杀死我的应用程序时,是否有一种方法或某种东西可以让我运行我的最后一段代码以将它们注销?我查看了android生命周期,我不能使用destroy,因为它只与那个活动有关。谢谢!
【问题讨论】:
我有一个用户登录和注销的应用程序。在登录时,它会告诉我的数据库用户在线。我遇到的问题是,当用户有一段时间不使用该应用程序并且处理器杀死我的应用程序时,是否有一种方法或某种东西可以让我运行我的最后一段代码以将它们注销?我查看了android生命周期,我不能使用destroy,因为它只与那个活动有关。谢谢!
【问题讨论】:
我找到了解决方案 - 不完美但对我有用。
1.) 创建一个在后台运行的服务,该服务在创建第一个活动时启动。
2.) 每个活动都绑定到此服务,因此它可以“签入”(即它是活动的并且未调用 onPause)
3.) 在每个活动中注册一个广播接收器,该接收器定期侦听服务触发的意图。
4.) 在接收到签入意图时,它调用一个服务方法,该方法基本上让服务现在有一个仍然存在的活动(我倾向于只在它有 windowFocus 时才响应该意图
5.) 如果有签到,服务会休眠,然后重新请求签入,如果没有签到,它会在重新请求签入之前休眠更短的时间,如果没有响应然后应用程序注销。 (在未找到签到时进行第二次请求的原因是考虑到在活动转换期间签到的问题,即开始新活动并关闭当前活动。
正如我所说,这不是最好的方法,但到目前为止似乎可以满足我的需求。
【讨论】:
为什么不能使用活动的 onDestroy 方法?如果您有很多活动,您可以创建自己的活动基类并从该基类派生所有活动。
public abstract class BaseActivity extends Activity {
....
@Override
public void onDestroy() {
super.onDestroy();
// do your stuff here
}
}
然后像这样创建所有活动:
public class YourActivity extends BaseActivity {
...
}
【讨论】:
在 AndroidManifest 中你有名字。现在创建
public class MyName extends Application {
}
这是您的应用程序类,一旦用户打开您的应用程序就会自动创建。现在只需覆盖 MyName 类中的 onTerminate() 方法。
@Override
public void onTerminate() {
user.logOut();
super.onTerminate();
}
您可以通过以下代码在每个 Activity 中使用您的 MyName 类:
MyName myName= (MyName) this.getApplication();
myName.logUser(user);
【讨论】: