我正在开发一个Android应用程序,我想通过单击"后退"按钮或"主页"按钮来检测用户何时退出我的应用程序.
此外,一个类似的事件onInit()在我的场景中会很有用,因为我只想让MyIn?t操作从一开始就开始.
onDestroy() 在其他应用需要更多内存之前不会被调用.
小智 27
您还可以使用Application.registerActivityLifecycleCallbacks(),并在任何活动暂停后发布延迟Runnable (将在用户左侧应用程序时调用)Handler.创建/启动/恢复活动时,将其Runnable从中删除Handler.因此,当您在应用程序内导航时,您总是取消该操作Runnable,但如果未激活应用程序中的其他活动,Runnable则会调用该文件.
我用它来退出我的应用程序时退出用户,这里是回调代码:
public class MyApplication extends Application implements Application.ActivityLifecycleCallbacks {
private Handler handler;
private Runnable runLogout = new Runnable() {
@Override
public void run() {
//logoutUser()
}
};
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(this);
handler = new Handler(getMainLooper());
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
handler.removeCallbacks(runLogout);
}
@Override
public void onActivityStarted(Activity activity) {
handler.removeCallbacks(runLogout);
}
@Override
public void onActivityResumed(Activity activity) {
handler.removeCallbacks(runLogout);
}
@Override
public void onActivityPaused(Activity activity) {
handler.postDelayed(runLogout, 1000);
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
}
Run Code Online (Sandbox Code Playgroud)
但是,Runnable不会在活动生命周期的上下文中运行,因此要在活动中使用它,您需要设置和检查某些应用程序范围的标志或广播意图.
Idi*_*tic 18
如果您的活动是堆栈中的最后一个,那么使用onKeyDown检测后退按钮将解决其中的1/2
主键有点棘手,没有绝对的方法,但你可以做这样的事情,这符合我的简单需求.
当用户单击主页按钮或某些内容中断您的应用程序时(例如来电),根据文档调用onUserLeaveHint,以便猜测您使用onUserInteraction方法标记最后一个用户交互时间.
现在,如果它在onUserLeaveHint之前足够紧密,你可以假设(不保证但到目前为止对我有用)主页按钮是你的应用程序被推入后台的原因(退出)
不知道你在捕捉主页按钮的意图是什么,无论如何这里是一个简单的方法,我使用100ms围栏围绕这两个事件我发现一直为我工作.注意:我只测试了一些手机,就像Android中的所有东西一样,你的里程数会因操作系统/硬件的不同而有所不同(即使是有记录的,有时也不应该工作的东西)
long userInteractionTime = 0;
@Override
public void onUserInteraction() {
userInteractionTime = System.currentTimeMillis();
super.onUserInteraction();
Log.i("appname","Interaction");
}
@Override
public void onUserLeaveHint() {
long uiDelta = (System.currentTimeMillis() - userInteractionTime);
super.onUserLeaveHint();
Log.i("bThere","Last User Interaction = "+uiLag);
if (uiDelta < 100)
Log.i("appname","Home Key Pressed");
else
Log.i("appname","We are leaving, but will probably be back shortly!");
}
Run Code Online (Sandbox Code Playgroud)
当用户单击主页按钮或某些内容中断您的应用程序时(例如来电),根据文档调用onUserLeaveHint,以便猜测您使用onUserInteraction方法标记最后一个用户交互时间.
只是对Idistic给出的答案进行了一次小修正 - 当您的活动被来电中断时,不会调用OnUserLeaveHint().以下是Android文档的片段 -
当活动即将作为用户选择的结果进入后台时,被称为活动生命周期的一部分.例如,当用户按下Home键时,将调用onUserLeaveHint(),但是当传入的电话呼叫导致调用中的Activity自动被带到前台时,onUserLeaveHint()将不会被调用的活动被调用.
| 归档时间: |
|
| 查看次数: |
20034 次 |
| 最近记录: |