You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用Options Menu周期性崩溃并关闭上一Activity问题排查

问题:Options Menu的Home按钮周期性崩溃,返回键无法回到前页面

我给开发中的应用加了带「home」按钮的Options Menu,按钮多数时候正常,但点击会周期性崩溃。崩溃常发生在按钮至少点过一次或按下系统返回键之后。另外,点击该按钮后会关闭上一Activity,按返回键回不到之前的页面。

Toolbar代码

// Creates toolbar
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    val menuInflater = menuInflater
    menuInflater.inflate(R.menu.home, menu)
    return true
}

// Listens to click of toolbar
override fun onOptionsItemSelected(item: MenuItem): Boolean {
    val id = item.itemId
    if (id == R.id.home) {
        val intent = Intent(this, Menu::class.java)
        startActivity(intent)
    }
    return super.onOptionsItemSelected(item)
}

Logcat崩溃日志

2023-11-28 11:58:15.760 6693-6693 AndroidRuntime
com.benwhittington.flanges D Shutting down VM 2023-11-28
11:58:15.765 6693-6693 AndroidRuntime
com.benwhittington.flanges E FATAL EXCEPTION: main
Process: com.benwhittington.flanges, PID: 6693
android.content.ActivityNotFoundException: Unable to find explicit
activity class {com.benwhittington.flanges/android.view.Menu}; have
you declared this activity in your AndroidManifest.xml, or does your
intent not match its declared ?
at
android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2171)
at
android.app.Instrumentation.execStartActivity(Instrumentation.java:1805)
at android.app.Activity.startActivityForResult(Activity.java:5596)
at
androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:780)
at android.app.Activity.startActivityForResult(Activity.java:5554)
at
androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:761)
at android.app.Activity.startActivity(Activity.java:6052)
at android.app.Activity.startActivity(Activity.java:6019)
at
com.benwhittington.flanges.FlangeInspection.onOptionsItemSelected(FlangeInspection.kt:242)
at android.app.Activity.onMenuItemSelected(Activity.java:4532)
at
androidx.activity.ComponentActivity.onMenuItemSelected(ComponentActivity.java:528)
at
androidx.fragment.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:352)
at
androidx.appcompat.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:269)
at
androidx.appcompat.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:110)
at
androidx.appcompat.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:66)
at
androidx.appcompat.widget.Toolbar$1.onMenuItemClick(Toolbar.java:225)
at
androidx.appcompat.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:781)
at
androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:836)
at
androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:159)
at
androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:987)
at
androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:977)
at
androidx.appcompat.widget.ActionMenuView.invokeItem(ActionMenuView.java:625)
at
androidx.appcompat.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:156)
at android.view.View.performClick(View.java:7892)
at android.widget.TextView.performClick(TextView.java:16220)
at android.view.View.performClickInternal(View.java:7869)
at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
at android.view.View$PerformClick.run(View.java:30891)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8762)
at java.lang.reflect.Method.invoke(Native Method)
at
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)

Manifest文件

<?xml version="1.0" encoding="utf-8"?>
<application
    android:allowBackup="true"
    android:dataExtractionRules="@xml/data_extraction_rules"
    android:fullBackupContent="@xml/backup_rules"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.Flanges"
    tools:targetApi="31">
    <activity
        android:name=".ViewISO"
        android:exported="false" />
    <activity
        android:name=".ViewInspection"
        android:exported="false" />
    <activity
        android:name=".AddEmail"
        android:exported="false" />
    <activity
        android:name=".FlangeInspection"
        android:exported="false" />
    <activity
        android:name=".SignUp"
        android:exported="false" />
    <activity
        android:name=".Menu"
        android:exported="false" />
    <activity
        android:name=".MainActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

解决方案

折腾许久后发现问题根源:我的Activity命名为Menu,这和Android框架自带的android.view.Menu类名冲突,导致启动Menu::class.java的Intent时,系统混淆了自定义Activity和系统类,引发随机崩溃。将Activity名称修改为其他非冲突名称后,所有问题都解决了——按钮正常工作,返回键也能回到之前的页面。

内容的提问来源于stack exchange,提问作者Whitt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:43:15