尽管没有对代码进行任何更改,但 MainActivity 不再从 startActivity(i)

几天前,我的应用程序停止在多个设备上运行。该代码至少一年没有被触及(即:最近没有进行任何更改)。它从 SplashScreenActivity 开始,从 SQL 数据库下载一些数据,效果很好。之后,这些数据将putExtra发送到用于启动 MainActivity 的 Intent - 这就是应用程序突然关闭的地方。通过调试,我知道 Intent 仍然被正确创建,但在 MainActivity 中“ onCreate”未被调用。我不知道中间是什么以及为什么它停止工作,也许与依赖性有关?有任何想法吗?

下面是 SplashScreen 的代码和 MainActivity 的 onCreate 方法,以及build.gradle我在其中进行了一些更改试图解决问题的(应用程序)(已弃用的编译更改为依赖项的实现和版本sdkVersion)。那并没有解决问题。

构建.gradle:


    apply plugin: 'com.android.application'

    

    android {

        compileSdkVersion 26

        buildToolsVersion '26.0.2'

        defaultConfig {

            applicationId "com.myname.myapp"

            minSdkVersion 19

            targetSdkVersion 26

            versionCode 14

            versionName "1.51"

            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

            multiDexEnabled true

        }

        buildTypes {

            release {

                minifyEnabled false

                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            }

        }

        compileOptions {

            targetCompatibility = 1.8

            sourceCompatibility = 1.8

        }

    }

    

    dependencies {

        implementation fileTree(dir: 'libs', include: ['*.jar'])

        androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.2', {

            exclude group: 'com.android.support', module: 'support-annotations'

        })

        implementation 'com.android.support:multidex:1.0.3'

        implementation 'com.android.support:appcompat-v7:26.1.0'

        implementation 'com.android.support:recyclerview-v7:26.1.0'

        implementation 'com.google.android.gms:play-services:12.0.1'

        testImplementation 'junit:junit:4.12'

    }


Qyouu
浏览 119回答 2
2回答

肥皂起泡泡

我找到了答案,它解释了尽管代码没有变化但行为发生变化的原因:随着数据库随着时间的推移而增长,字符串的长度strResult超过了可以使用的最大长度Intent。putStringArrayListExtra就我而言,我可以简单地减少数据量,但这显然不是所有情况下的解决方案。所有其他建议的代码更改都会带来更好的风格,所以感谢您的回答!

RISEBY

您尚未共享 Logcat 错误堆栈,这将有助于进一步了解该问题。但似乎您正在尝试从新线程而不是 UI 线程启动活动,因此应用程序崩溃,只需移出可运行 run 方法内的代码,并且不要启动新线程。如果由于某种原因您希望代码异步运行,请通过处理程序运行您的 Runnable。下面是片段if (isOnline()) {    new Handler().postDelayed(new Runnable() {        @Override        public void run() {            strResult.add(new DataTransfer().receiveDataFromDatabase(getString(R.string.sql_id_users), "0", getString(R.string.url_receive), getmAccessCode()));            strResult.add(new DataTransfer().receiveDataFromDatabase(getString(R.string.sql_id_ridesByDate), "0", getString(R.string.url_receive), getmAccessCode()));            strResult.add(new DataTransfer().receiveDataFromDatabase(getString(R.string.sql_id_ridesByDriverID), "0", getString(R.string.url_receive), getmAccessCode()));            strResult.add(new DataTransfer().receiveDataFromDatabase(getString(R.string.sql_id_passengersByDate), "0", getString(R.string.url_receive), getmAccessCode()));            Intent i = new Intent(SplashScreen.this, MainActivity.class);            i.putStringArrayListExtra("tableContents", strResult);            startActivity(i);            finish();        }    },1000);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java