Android真机测试异常:添加第二个Java类/Activity后应用启动黑屏
兄弟,咱一步步来排查这个黑屏问题——毕竟之前功能正常,加了新Activity才出状况,大概率是新Activity的配置或启动逻辑出了问题,跟那些没引用的UI元素没关系(Android允许布局里有控件不被Java代码引用,只会导致这些控件没法通过代码交互,不会黑屏)。下面是具体排查步骤:
检查AndroidManifest.xml的Activity注册
这是最常见的坑!新创建的Activity必须在AndroidManifest.xml里声明,系统才能找到它。你得确保里面有类似这样的代码:<activity android:name=".你的第二个Activity类名" />如果是把新Activity设为启动页,那还要给它加主入口的intent-filter,但如果是从主Activity跳转过去,就不需要这个filter。要是没注册,系统找不到Activity就会直接黑屏。
确认跳转逻辑(或启动逻辑)无错误
如果是从主Activity跳转到新Activity,检查跳转代码是不是正确:// 主Activity里的跳转代码示例 Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent);注意类名别写错,也别漏了调用
startActivity(intent)。如果是默认启动新Activity,那要确保manifest里把新Activity的intent-filter设为<action android:name="android.intent.action.MAIN" />和<category android:name="android.intent.category.LAUNCHER" />,同时按需调整原来主Activity的配置。检查新Activity的onCreate方法
一定要确认在onCreate里调用了setContentView(R.layout.你的新布局文件名)!要是忘了这行代码,Activity启动后没有加载任何UI,自然就是黑屏。另外,别在onCreate里做耗时操作(比如网络请求、大量计算),不然会导致界面卡住,看起来像黑屏。查看Logcat日志定位问题
这是排查Android问题的核心!真机连接电脑后,在Android Studio打开Logcat,过滤Error级别日志,看看有没有明确的报错信息:- 比如
ClassNotFoundException:说明Activity没注册或者类名写错了; - 比如
InflateException:说明新布局文件有语法错误(比如标签没闭合、引用了不存在的资源); - 比如
NullPointerException:可能是你在代码里调用了未初始化的控件(不过你说有些UI没引用,这个概率低,但还是要检查)。
- 比如
简化测试缩小范围
先把新Activity的代码简化到最基础的状态:public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); } }同时确保对应的布局文件是最简的(比如只放一个TextView),看看能不能正常启动。如果可以,再一点点添加原来的代码,就能找到是哪部分导致的问题。
内容的提问来源于stack exchange,提问作者Av3570

