我正在制作一个Android应用程序。当我打开应用程序启动画面显示然后它进入mainactivity。现在,如果用户按下后退按钮并从最小化按钮打开应用程序。它再次显示飞溅而不是主动。任何人都可以帮我解决这个问题吗?以下是启动活动的代码,请检查并给出解决方案。
飞溅
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
fcm_id = FirebaseInstanceId.getInstance().getToken();
session = new SessionManager(getApplicationContext());
usermyid=session.userID();
if(usermyid!=null)
{
System.out.println("usermyid is not null"+usermyid);
usermyid=session.userID();
userd=Long.parseLong(usermyid);
}
else
{
System.out.println("usermyid is null"+usermyid);
android_id = Settings.Secure.getString(getApplicationContext().getContentResolver(),
Settings.Secure.ANDROID_ID);
System.out.println("Without Exclude alphabets"+android_id);
android_id = android_id.replaceAll("[^\\d.]", "");
System.out.println("After Exclude alphabets"+android_id);
long x=Long.parseLong(android_id);
x*=-1;
System.out.println("Final Id" + x);
session_id = String.valueOf(x);
System.out.println("sessionid in skipactivity" + session_id);
session.createLoginSession(session_id);
userd=Long.parseLong(session_id);
}
if (session.checkLogin()) {
if(userd < 0)
{
System.out.println("It is minus"+userd);
prefs = getApplicationContext().getSharedPreferences("MyPrefSKIP", Context.MODE_PRIVATE);
boolean rb0 = prefs.getBoolean("skipstuff", false);
if(rb0 == true){
// Do something
System.out.println("SKIP IS TRUE");
Intent i = new Intent(getApplicationContext(), MainActivity.class);
userid = session.userID();
username=session.username();
userlastname=session.userlastname();
useradd1=session.useradd1();
useradd2=session.useradd2();
usercity=session.usercity();
userstate=session.userstate();
userzip=session.userpincode();
usercountry=session.usercountry();
userphone=session.userphone();
usermail=session.useremail();
usercounter=session.usercounter();
System.out.println("User ID in MAIN : " + userid+username+userlastname+useradd1+useradd2+usercity+userstate+userzip+usercountry);
i.putExtra("id", userid);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
finish();
}
else
{
System.out.println("SKIP IS FALSE");
// String forskipid= String.valueOf(userd);
Intent menuLeft = new Intent(SplashActivity.this, SkipActivity.class);
//menuLeft.putExtra("id",session_id);
startActivity(menuLeft);
}
}
else
{
System.out.println("It is plus"+userd);
Intent i = new Intent(getApplicationContext(), MainActivity.class);
userid = session.userID();
username=session.username();
userlastname=session.userlastname();
useradd1=session.useradd1();
useradd2=session.useradd2();
usercity=session.usercity();
userstate=session.userstate();
userzip=session.userpincode();
usercountry=session.usercountry();
userphone=session.userphone();
usermail=session.useremail();
usercounter=session.usercounter();
System.out.println("User ID in MAIN : " + userid+username+userlastname+useradd1+useradd2+usercity+userstate+userzip+usercountry);
i.putExtra("id", userid);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
finish();
}
} else {
System.out.println("THIS SHOULD NOT BE SHOW");
}
//GetNotification();
AddDeviceToken();
SplashActivity.this.finish();
}
}, SPLASH_TIME_OUT);
}
MainActivity
@Override
public void onBackPressed() {
if(getSupportFragmentManager().getBackStackEntryCount()>1){
getSupportFragmentManager().popBackStack();
}else
if(getSupportFragmentManager().getBackStackEntryCount()==0){
this.finish();
}
}
@Override
protected void onResume() {
super.onResume();
viewtocart();
}
@Override
protected void onStart() {
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
mGoogleApiClient.connect();
super.onStart();
}
答案 0 :(得分:2)
在你的SplashActivity中 当您要为mainActivity触发Intent时添加finish()。
在MainActivity中,实现onBackPresssed(),onDestroy()和onResume();
希望这会有所帮助。
答案 1 :(得分:0)
通常在onBackPress方法中,用户不应该覆盖它。它通常由android系统维护来完成活动。更改你的onBackPressed()方法并检查它是否对你有帮助。
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0 &&
getSupportFragmentManager().findFragmentById(R.id.your_container)!=null) {
Fragment fragment= getSupportFragmentManager().findFragmentById(R.id.your_container);
if(fragment.getClass().getSimpleName().equalsIgnoreCase(FragmentTest.class.getSimpleName())){
getSupportFragmentManager().popBackStackImmediate();
}
}else {
super.onBackPressed();
}
}
修改强>:
后退按钮,然后从最小化按钮
打开应用问题出在这里。因为你先启动了活动启动,然后在转到主要时你正在清除标志并完成启动。所以后堆只包含一个活动。
当您按下主活动中的后退按钮时,应用程序将退出,而不是显示任何反向堆叠的活动。当您按下生命周期方法onPause()时,在主活动中,将调用onStop()和onDestroy()。
从最近再次打开应用程序时再次调用splash的原因是应用程序再次启动而splash是第一个活动。因此显示出来。
按住主页活动中的后退按钮会退出应用程序,但按主页按钮会最小化您的应用程序。最小化的应用程序会从您离开的位置打开应用程序,因为它将在内存中。
要详细了解活动生命周期,请查看此链接https://developer.android.com/guide/components/activities/activity-lifecycle.html