android 从最近的应用程序打开时,应用程序出错

wtlkbnrh  于 2023-09-28  发布在  Android
关注(0)|答案(1)|浏览(129)

我的应用程序中有一个SplashActivity,应用程序是通过此Activity启动的。SplashActivity的持续时间为2.5秒,当此时间结束时,HomeActivity打开。在HomeActivity中按下后退按钮后,应用程序将通过finishAffinity()退出。每当我退出HomeActivity,然后从最近的应用程序中再次单击我的应用程序时,应用程序无法自行重启。我在SplashActivity中获取用户信息,并将其提供给HomeActivty,我使用Firebase进行此操作。
当应用程序无法自行启动时,它给出的错误如下:
java.lang.RuntimeException:无法启动活动ComponentInfo{com.medita.mobile/com.medita.mobile.SplashActivity}:com.google.firebase.database.DatabaseException:必须在使用FirebaseDatabase示例之前调用setPersistenceEnabled()。
我该怎么办?我希望应用程序在退出HomeActivity时通过按后退按钮重新启动SplashActivity,并从最近的应用程序部分再次单击应用程序。
我尝试在关闭Activity(finishAndRemoveTask())时将其从最近的应用程序中删除,以关闭Activity,但没有任何效果。因此,我认为一切都以SplashActivity结束。我还尝试了在onStop()onPause()方法中使用finishAffinity(),但它也不起作用。
我的舱单文件;

<activity
          android:name=".HomeActivity"
          android:exported="false"
          android:screenOrientation="portrait" />
<activity
          android:name=".SplashActivity"
          android:exported="true"
          android:screenOrientation="portrait" >
          <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
</activity>

飞溅活动;

public class SplashActivity extends AppCompatActivity {

    private FirebaseAuth mAuth = FirebaseAuth.getInstance();
    private FirebaseUser currentUser;

    private DatabaseReference currentUserRef;
    private DatabaseReference userRef;
    String username = null;
    String email = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash_screen);
        
        FirebaseApp.initializeApp(this);
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);

        ...

        new Handler().postDelayed(new Runnable(){
            @Override
            public void run() {
                if (currentUser != null) {
                    getLoggedInUsername();
                    Intent home = new Intent(SplashActivity.this, HomeActivity.class);
                    startActivity(home);
                    overridePendingTransition(0,R.anim.fade_out);
                    finish();
                } else {
                    Intent mainIntent = new Intent(SplashActivity.this,LoginActivity.class);
                    SplashActivity.this.startActivity(mainIntent);
                    SplashActivity.this.finish();
                    overridePendingTransition(0,R.anim.fade_out);
                }

            }
        }, 2500);

    }

   private String getLoggedInUsername() {
        FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();

        ...

        return username;
    }
}

Home活动;

@Override
public void onBackPressed() {
    finishAffinity();
}
mspsb9vt

mspsb9vt1#

创建一个自定义的Application类(一个extends Application类)。在自定义Application类的onCreate()中,执行Firebase初始化和配置。此方法仅在应用程序启动时调用一次,然后再示例化任何Activity。
Activity中删除Firebase初始化。
将自定义Application类添加到<application>声明中的清单中,如下所示:

android:name="my.package.MyCustomApplication" (or whatever you call your custom Application class)

注意:您也可以删除HomeActivity.onBackPressed()中的代码,因为onBackPressed()的默认实现将完成当前的Activity,而此时您只有一个Activity处于活动状态。

相关问题