簡體   English   中英

MainActivity在啟動屏幕生命周期之間自毀

[英]MainActivity destroys itself between Splash Screen LifeCycle

我有一個SplashScreen和MainActivity,當應用啟動時,它會顯示Splash屏幕(延遲3秒),然后顯示MainActivity,但是當我單擊mi App的BarNotification(在應用外部)時,Splash屏幕會顯示(延遲3秒)和應用崩潰,在LogCat中,MainActivity在啟動屏幕意圖生命周期之間自行銷毀。 (第29,30行logcat

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">


    <WebView
            android:id="@+id/browser"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
    />


</LinearLayout>

splash.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:background="@color/white"
        >

    <ImageView android:layout_width="wrap_content"
            android:contentDescription="splash screen"
            android:id="@+id/splash"
            android:src="@drawable/splash"
            android:layout_height="wrap_content"
            android:scaleType="centerInside"/>
</LinearLayout>

為什么我無法通過Bar Notificaction正確啟動應用程序?

這是一些代碼:

MainActivity.java

public class MainActivity extends Activity {

    private WebView webview;

    public MainActivity() {

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        log.debug("onCreate(): " + savedInstanceState);
        MyApplication.startSomeMobileCore(this);
        MyApplication.startSomeMobileNotifier(this);

        setContentView(R.layout.main);
        onNewIntent(getIntent());
    }

    @Override
    protected void onStart() {
        log.debug("onStart()");
        super.onStart();
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        this.wasRestarted = true;
    }

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

    protected void onPause() {
        super.onPause();
        this.receivedIntent = false;
    }

    protected void onStop() {
        super.onStop();
        this.receivedIntent = false;
    }

    public void onDestroy() {
        super.onDestroy();
    }

    @Override
    public void onNewIntent(Intent intent) {
        log.debug("onNewIntent(): " + intent);
        super.onNewIntent(intent);

        if(intent == null) {
            log.warn("Received null intent, will ignore");
        }

        if ("OK".equals(authCode)) {


            if (intent != null && intent.getData() != null &&
                ("content".equals(intent.getData().getScheme()) || 
                "http".equals(intent.getData().getScheme()))) {
                log.debug("intent.getData() :" + intent.getData() + "; intent.getData().getScheme() : " + intent.getData().getScheme());
                String requestedPath;
                if ("http".equals(intent.getData().getScheme())) {
                    requestedPath = URLDecoder.decode(intent.getData().toString());
                } else {
                    requestedPath = intent.getData().getPath();
                }
                showResource(requestedPath);
            } else {
                log.debug("Intent without data -> go to entry page after splash screen");
         showResource(Configuration.properties.getProperty(""));
            }
        } else {
            Intent errorIntent = new Intent(this, ErrorIntent.class);
            startActivity(errorIntent);
            // finish actual activity
            finish();
        }

        log.debug("Show splash screen");
        Intent intentSplash = new Intent(this, SplashIntent.class);
        startActivity(intentSplash);
    }

    void showResource(String resourceToShow) {
        webview = (WebView)findViewById(R.id.browser);
        webview.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
        webview.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
        webview.setWebViewClient(new WebViewClient());
        webview.getSettings().setJavaScriptEnabled(true);
        webview.getSettings().setDomStorageEnabled(true);
        webview.loadUrl(resourceToShow);
    }
}

SplashIntent.java

public class SplashIntent extends Activity {
    // Time splash screen should be shown (in ms)
    private static final int splashTime = 3000;
    static Logger log = Logger.getLogger(SplashIntent.class);

    @Override
    public void onCreate(final Bundle savedInstanceState) {
        log.debug("SplashIntent: onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
             public void run() {
                 log.debug("SplashIntent: killing splash");
                 finish();
             }
        }, splashTime);

    }
}

日志貓

希望你們能幫助我...目前我真的沒有主意

在您的SplashIntent類中嘗試一下

Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
            @Override
            public void run() {       
                Intent mainIntent = new Intent(Splash.this,MainActivity.class);
                SplashIntent.this.startActivity(mainIntent);
                SplashIntent.this.finish();
            },splashTime);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM