【问题标题】:Performs logout when user remove app via task swipe in android当用户通过 android 中的任务滑动删除应用程序时执行注销
【发布时间】:2014-11-21 02:58:26
【问题描述】:

当用户用户从当前运行的应用程序列表中删除应用程序时,我想清除用户凭据并注销用户。在这里,我正在做的是,当用户通过刷掉应用程序列表来结束应用程序时,其中的应用程序应该执行注销。但是当用户通过滑动删除应用程序时,它什么也不做。下面是我的代码。

public class MyService extends Service{

    public void onTaskRemoved(){
        Log.i("RootActivity:onTaskRemoved()","******TaskRemoved******");
        SharedPreferences pref = getSharedPreferences(getString(R.string.pref_current_user), MODE_PRIVATE);             
        SharedPreferences.Editor editor = pref.edit();
        editor.clear();     // CLEAR ALL FILEDS
        editor.commit();    // COMMIT CHANGES
        Log.i("RootActivity:onTaskRemoved()","******APP LOGGEDOUT******");
        setloginButton();   // Change logout button to login
        Log.i("RootActivity:onTaskRemoved()","******loginButton is set******");
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
}

【问题讨论】:

  • 你的方法onTaskRemoved()被调用了吗?
  • @VedPrakash nupp,它没有登录logcat

标签: android android-service swipe logout


【解决方案1】:

与 Firebase 结合使用时,就像

一样简单
   @Override
protected void onDestroy() {
    super.onDestroy();
    FirebaseAuth.getInstance().signOut();
}

【讨论】:

    【解决方案2】:

    只是你只绑定了bindService()的服务,所以onTaskRemoved()永远不会被调用。

    使用服务,您可以 -

    • 绑定
    • 开始
    • 绑定并启动

    这个documentation一般会分别讨论这两种服务,你的服务可以双向工作,这就是你需要做的——

    它可以启动 (to run indefinitely) 并允许绑定。

    这只是你是否实现几个回调方法的问题:onStartCommand() 允许组件启动它,onBind() 允许绑定。

    两者兼顾 -

    startService(new Intent(context, MyService.class));
    
    // Bind to the service
    bindService(new Intent(context, MyService.class),
    mConnection, Context.BIND_AUTO_CREATE);
    

    【讨论】:

      【解决方案3】:
      protected void onDestroy() {
      SharedPreferences pref=getSharedPreferences(getString(R.string.pref_current_user),MODE_PRIVATE);             
          SharedPreferences.Editor editor = pref.edit();
          editor.clear();     // CLEAR ALL FILEDS
          editor.commit();    // COMMIT CHANGES
          Log.i("RootActivity:onTaskRemoved()","******APP LOGGEDOUT******");
          setloginButton();   // Change logout button to login
          Log.i("RootActivity:onTaskRemoved()","******loginButton is set******");  
      super.onDestroy();
      }
      

      将此添加到您的活动中....

      【讨论】:

      • 这不是我正在查看的方法,因为在 onDestroy 方法中。它是不可靠的,因为它可能不会一直被调用,除非设备内存在低内存的实例,否则将调用 onDestroy。但是,谢谢
      • 我在 nexus 5 设备上对其进行了测试,当我从当前正在运行的应用程序列表中删除该应用程序时,调用了 onDestroy。你只想要那个吗???
      • 是的,当您从正在运行的应用程序列表中删除时会调用 onDestroy,但行为不稳定、不一致。 logout 方法不是在一致的基础上调用的;根据我的假设和理解(仅当设备内存不足且需要清除某些实例时才调用它)。因此,我知道不建议使用 onDestroy,但它是一种很好且简单的方法。我也在兼容 Android 的设备上测试过该功能。
      猜你喜欢
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      • 2018-03-18
      • 2013-08-23
      • 2019-09-20
      • 1970-01-01
      相关资源
      最近更新 更多