繁体   English   中英

Android:在onCreate中启动一个intent会导致无限循环/崩溃

[英]Android: Starting an intent inside of onCreate is causing an infinite loop / crash

我对Android / java很陌生,并且遇到了我的第一个头脑。

我试图根据用户是否已登录有条件地更改起始视图(我已经设置了is_logged_in,这里更简单地说明问题)。

非常感谢。

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        boolean is_logged_in = false;

        if(is_logged_in) {
            setContentView(R.layout.activity_main);
        } else {
            menu_sign_up(); // How would I pass the View?
        }
    }

    // Doesn't work, at least when called inside of MainActivity's onCreate
    public void menu_sign_up(/* View view */) {
        Intent intent = new Intent(this, SignUp.class);
        startActivity(intent);
    }

    // Example of a working method, at least when called from android:onClick in XML
    public void menu_sign_in(View view) {
        Intent intent = new Intent(this, SignIn.class);
        startActivity(intent);
        overridePendingTransition(0,0);
    }
}

public class SignUp extends MainActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sign_up);
    }

    // ...
}

** * ** 截断下面的堆栈跟踪 ** * **** (adb logcat *:W)

W/ActivityManager(19583): Activity idle timeout for HistoryRecord{40953fd8 com.example.digitalkarmaeclipse/.SignUp}
W/ActivityManager(): Activity idle timeout for HistoryRecord{}
W/ActivityManager(21900): Launch timeout has expired, giving up wake lock!
W/ActivityManager(21900): Activity idle timeout for HistoryRecord{40a23580 com.example.digitalkarmaeclipse/.MainActivity}
W/ActivityManager(21900): Activity idle timeout for HistoryRecord{40a2c6f8 com.example.digitalkarmaeclipse/.SignUp}
W/ActivityManager(21900): Activity idle timeout for HistoryRecord{40a30100 com.example.digitalkarmaeclipse/.SignUp}
W/ActivityManager(21900): Activity idle timeout for HistoryRecord{40a338e8 com.example.digitalkarmaeclipse/.SignUp}
W/ActivityManager(21900): Activity idle timeout for HistoryRecord{40a376e0 com.example.digitalkarmaeclipse/.SignUp}

您当前的应用程序结构没有多大意义。 SignUp也必须是一个活动吗? 您可以使用AlertDialog执行类似的操作。 如果它确实需要是一个Activity然后让它扩展Activity ,那么在这个上下文中扩展HomeActivity没有多大意义。

我也不喜欢将setContentView()放在逻辑语句中。 onCreate()仅在创建Activity时调用。 因此,如果您启动SignUp Activity然后按后退按钮,则不会有HomeActivity的布局。

编辑:和Shark一样,看起来你没有办法将数据从SignUp传回HomeActivity 您应该尝试使用startActivityForResult()然后在SignUp使用setResult()来说明它是否成功。

你需要让onCreate()完成,然后将你的新Activity移动到onResume()或onStart(); 那些被调用,因为你的活动是向用户显示的,而不是它仍在初始化(本身)。

此外,看起来你需要设置一个

onLoginFinished(int result);

回调...尝试使用startActivityForResult()运行登录并在onActivityResult()中捕获结果

要么 ...

您创建自己的界面,一旦其他活动完成,它将调用onLoginFinished(isOK)回调,您可以在其中确定要使用的屏幕。

暂无
暂无

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

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