Android应用程序:在应用程序销毁之前修改firebase数据库

时间:2018-04-20 20:20:06

标签: android firebase-realtime-database android-ondestroy

当我的应用程序被销毁时,我正在尝试修改我的firebase数据库,这意味着当我从最近运行的应用程序列表中删除应用程序或者当我单击“主页”按钮时,但我不知道该怎么做这个,我尝试在每个活动的onDestroy()方法中做到这一点,但它不起作用。

这是我的onDestroy()方法:

@Override
protected void onDestroy() {
    super.onDestroy();
    FirebaseDatabase.getInstance().getReference().child("users").child(encodeEmail(mAuth.getCurrentUser().getEmail())).child("status")
            .setValue("destroyed") ;

    /*Toast.makeText(ContactsActivity.this,"closing app",Toast.LENGTH_LONG).show();
    MyApp app = (MyApp)getApplication() ;
    app.setUpBeforeClosing();*/

}

2 个答案:

答案 0 :(得分:0)

你有BaseActivity吗? 我想你只是忘了在正确的活动中添加这一行。 我建议您创建BaseAvtivity.java类并从中扩展所有活动,BaseActivity将扩展AppCompatActivity,然后覆盖BaseActivity中的生命周期方法,并在onDestroy方法中设置新值。

答案 1 :(得分:0)

On Destroy Documentation

  

不要指望这种方法被称为保存数据的地方!例如,如果某个活动正在编辑内容提供程序中的数据,那么这些编辑应该在onPause()或onSaveInstanceState(Bundle)中提交,而不是在此处。通常实现此方法是为了释放与活动相关联的线程之类的资源,以便在其应用程序的其余部分仍在运行时,被破坏的活动不会留下这些东西。在某些情况下,系统会在不调用此方法(或其他任何方法)的情况下简单地终止活动的托管过程,因此不应该使用它来执行在过程消失后仍然存在的事情。

使用OnPause或使用服务写入数据。

  1. 在清单

    中添加此内容
    <service
    android:name="com.myapp.MyService"
    android:stopWithTask="false" />
    
  2. 现在在您的MyService服务中,覆盖方法onTaskRemoved。 (仅当stopWithTask设置为false时才会触发。

    public void onTaskRemoved(Intent rootIntent) {
    
    //save data to firebase
    
    //stop service
    stopSelf();  
    }
    
  3. reference