我的应用程序中有一个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();
}
1条答案
按热度按时间mspsb9vt1#
创建一个自定义的
Application
类(一个extends Application
类)。在自定义Application
类的onCreate()
中,执行Firebase初始化和配置。此方法仅在应用程序启动时调用一次,然后再示例化任何Activity。从
Activity
中删除Firebase初始化。将自定义
Application
类添加到<application>
声明中的清单中,如下所示:注意:您也可以删除
HomeActivity.onBackPressed()
中的代码,因为onBackPressed()
的默认实现将完成当前的Activity
,而此时您只有一个Activity
处于活动状态。