onCreate()未被调用求助:自定义ROM设备无法调试
别急,我来帮你一步步排查这个问题!你的非主Activity的onCreate()完全没触发,连日志和自定义方法都没执行,结合主Activity是播放intro视频的场景,大概率是页面跳转环节出了问题——毕竟自定义ROM没法调试,咱们只能靠逻辑排查:
AndroidManifest.xml里必须正确声明这个Activity,Android 12+还要注意exported属性的设置,别漏了或者写错类名/包名:
<activity android:name=".YourNonMainActivity" <!-- 这里要写对完整的类路径 --> android:exported="true" /> <!-- 从主Activity跳转的话,true/false都可,但建议先设为true排查 -->
要是注册有误,系统根本找不到这个Activity,自然不会调用onCreate()。
你的主Activity是播放intro视频,应该是视频播放完成后跳转对吧?那得确认跳转代码有没有被触发:
- 如果用MediaPlayer播放,要确保
OnCompletionListener正确设置且逻辑没问题:
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // 先加个Toast(哪怕ROM不显示,先写上确认逻辑) Toast.makeText(MainActivity.this, "视频播放完成,准备跳转", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(MainActivity.this, YourNonMainActivity.class); startActivity(intent); // 可选:如果不需要保留主Activity,加上finish() finish(); } });
- 如果用VideoView,同理要绑定
OnCompletionListener,而且Intent的目标类必须写对,别把类名或者包名写错了。
比如主Activity的onCreate()里有没有误调用finish()?或者视频播放逻辑有没有未捕获的异常导致崩溃?可以在主Activity的onDestroy()里加个Toast或者日志,看看是不是还没等到视频播放完就被销毁了:
@Override protected void onDestroy() { super.onDestroy(); Toast.makeText(this, "主Activity被销毁了", Toast.LENGTH_SHORT).show(); }
暂时把这个非主Activity设为启动入口,看看它能不能自己启动:
<activity android:name=".YourNonMainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
同时注释掉主Activity的启动入口。运行app后,如果这个Activity能正常启动,onCreate()里的日志和方法能执行,说明问题出在主Activity的跳转逻辑上;如果还是不行,那可能是这个Activity的代码或布局有问题——比如onCreate()里有未捕获的异常,或者xml布局里有不存在的控件ID导致Inflate崩溃。
因为Android Studio识别不了设备,没法看Logcat,咱们可以把日志写到本地文件里,手动查看:
在非主Activity里加一个写日志的方法:
private void writeLog(String logContent) { try { // 日志文件存在应用的外部文件目录,容易找到 File logFile = new File(getExternalFilesDir(null), "app_debug_log.txt"); FileWriter writer = new FileWriter(logFile, true); // 加上时间戳,方便确认执行时间 writer.write(System.currentTimeMillis() + ": " + logContent + "\n"); writer.close(); } catch (IOException e) { e.printStackTrace(); } }
然后在onCreate()里调用writeLog("I am working");,运行app后,用设备的文件管理器去Android/data/你的应用包名/files/目录下找app_debug_log.txt,看看有没有这条日志——这样就能100%确认onCreate()到底有没有执行。
内容的提问来源于stack exchange,提问作者DrunkProgrammer

