繁体   English   中英

一个活动即将开始时开始另一个活动:Android

[英]Starting another activity when one activity is about to start: Android

我有一个应用程序,每次用户访问该应用程序时,我都必须显示启动画面。 那是他重新启动应用程序还是他放弃应用程序,或者他是否单击启动器图标。

问题是,在启动屏幕之后,我还想回到他离开应用程序时可见的最后一个活动(以防万一,这不是一个全新的开始)

为了解决这个问题,我扩展了Application并实现了ActivityLifecycleCallbacks。

因此,当我的应用程序处于免费状态并返回到前例时,我将从

@Override
    public void onActivityStarted(Activity activity) {
     //launch splash screen
}

现在,启动画面工作完成后,我将其杀死,然后我回到用户在应用程序进入后台之前最后一次使用该应用程序时的活动。

在这里似乎工作正常,但我不断收到以下错误:

09-14 16:44:46.746: E/ActivityThread(5622): Performing pause of activity that is not resumed: {SignInActivity}
09-14 16:44:46.746: E/ActivityThread(5622): java.lang.RuntimeException: Performing pause of activity that is not resumed: {SignInActivity}
09-14 16:44:46.746: E/ActivityThread(5622):     at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3015)
09-14 16:44:46.746: E/ActivityThread(5622):     at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3003)
09-14 16:44:46.746: E/ActivityThread(5622):     at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2981)
09-14 16:44:46.746: E/ActivityThread(5622):     at android.app.ActivityThread.access$1000(ActivityThread.java:135)
09-14 16:44:46.746: E/ActivityThread(5622):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1207)
09-14 16:44:46.746: E/ActivityThread(5622):     at android.os.Handler.dispatchMessage(Handler.java:102)
09-14 16:44:46.746: E/ActivityThread(5622):     at android.os.Looper.loop(Looper.java:136)
09-14 16:44:46.746: E/ActivityThread(5622):     at android.app.ActivityThread.main(ActivityThread.java:5001)
09-14 16:44:46.746: E/ActivityThread(5622):     at java.lang.reflect.Method.invokeNative(Native Method)
09-14 16:44:46.746: E/ActivityThread(5622):     at java.lang.reflect.Method.invoke(Method.java:515)
09-14 16:44:46.746: E/ActivityThread(5622):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
09-14 16:44:46.746: E/ActivityThread(5622):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
09-14 16:44:46.746: E/ActivityThread(5622):     at dalvik.system.NativeStart.main(Native Method)

所以我有两个问题:

  1. 我该怎么做才能避免出现此错误。
  2. 有没有更好的方法来处理我上面提到的流程:我必须显示启动屏幕,然后确定最后一次可见的活动?

谢谢,阳光明媚

进入Oncreate方法中,您可以启动ActivityForResult

startActivityForResult(intent, activity);

然后按照以下步骤进行活动:

protected void onActivityResult(int requestCode, int resultCode, Intent data)

如果我理解正确,即使在应用程序被完全销毁/终止后,您也想显示上一次活动。 您将需要持久的数据来实现我认为的目标。 我以下面的共享首选项为例(尚未测试,但希望您能理解)。

//Inside every activity of your app
@Override
public void onResume(){
    super.onResume();
    //Store the current activity name inside shared preferences
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putString("LastActivity", getCurrentActivityName());
    editor.commit();
    //Show splash screen here every time the app is brought to foreground (aka it resumes)
}

private void openActivityFromName(String name){
    Class<?> c = null;
    if(name != null) {
        try {
            c = Class.forName(name);
        } catch (ClassNotFoundException e) {            
            e.printStackTrace();
        }
    }
    Intent intent = new Intent(this, c);
    startActivity(intent);
}

private String getCurrentActivityName(){
    this.getClass().getSimpleName()
}

/**
* Inside your main activity (the one that opens first normally)
*/
@Override
protected void onCreate(Bundle state){
    super.onCreate(state);   
    // Restore preferences
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    String lastActivity = settings.getString("LastActivity", "");
    //Open the last opened activity everytime the app opens 
    openActivityFromName(lastActivity);
}

将您的应用程序置于后台(不关闭它)不会关闭您当前的活动。 因此,仅在应用程序被完全销毁并再次调用onCreate时才需要打开最后一个活动的行为。

我有同样的问题。 我认为您应该只使用onResume方法,最后使用onPause()方法来控制活动状态。

放置onResume()方法

@Override
protected void onResume()
{
 super.onResume();
...//
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM