【问题标题】:App crashes in FroYo & GingerbreadFroYo & Gingerbread 中的应用程序崩溃
【发布时间】:2011-08-20 07:13:09
【问题描述】:

--匿名回答是我解决这个问题的答案。--

我一直在为 Android 编写一个应用程序,在 Honeycomb 中一切正常,但在我的 FroYo 和 Gingerbread 设备上运行不佳(与您的预期相反)。

这是我认为导致问题的代码:

@Override
protected void onStart() {
    int versionNumber = Integer.valueOf(android.os.Build.VERSION.SDK);
    if (versionNumber == 11) {
        super.onStart();
        ActionBar actionBar = this.getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

在这里我实现了 ActionBar 的图标到首页功能,我添加了 versionNumber 变量,因为我认为在 Honyecomb 之前的设备中缺少 ActionBar 会导致活动运行时出现问题,但它仍然会崩溃并且我相信这是问题所在,尽管我在调试方面很糟糕并且不理解 logcat 给我的任何东西。

编辑:logcat - 我希望我得到了正确的部分?!

08-20 17:21:41.326: WARN/ActivityManager(2707): 试图启动 com.squirculardesign.android.pixel/.About 08-20 17:21:41.346: INFO/dalvikvm(4059): 找不到方法 com.squirculardesign.android.pixel.About.getActionBar,引用自 方法 com.squirculardesign.android.pixel.About.onStart 08-20 17:21:41.346:WARN/dalvikvm(4059):VFY:无法解析虚拟 方法54:Lcom/squirculardesign/android/pixel/About;.getActionBar ()Landroid/app/ActionBar; 08-20 17:21:41.346: 调试/dalvikvm(4059): VFY:在 0x0011 08-20 17:21:41.346 处替换操作码 0x6e: DEBUG/dalvikvm(4059): VFY: 死码 0x0014-0018 in Lcom/squirculardesign/android/pixel/About;.onStart()V 08-20 17:21:41.386: INFO/ALSAModule(2588): 初始化 ALSA PLAYBACK 设备 hifi 08-20 17:21:41.386: WARN/AudioFlinger(2588): 写入被阻止 108 毫秒,3 次延迟写入,线程 0x5e758 08-20 17:21:41.406: 调试/dalvikvm(4059):GC_EXTERNAL_ALLOC 释放 38K,释放 52% 2621K/5379K,外接190K/518K,暂停36ms 08-20 17:21:41.596: INFO/AudioFlinger(2588): 停止输出 streamType (0, 1) for 1 08-20 17:21:41.596:调试/音频硬件雅马哈(2588): AudioStreamOut::setParameters(keyValuePairs="stop_output_streamtype=1") 08-20 17:21:42.096: 错误/yamaha::media::Parameters(2588): SalesCode = OPS 08-20 17:21:42.671:错误/灯(2707):write_int:路径 /sys/devices/virtual/misc/melfas_touchkey/亮度,值 2 08-20 17:21:42.671:WARN/PowerManagerService(2707):定时器 0x7->0x3|0x3 08-20 17:21:42.671:信息/PowerManagerService(2707):Ulight 7->3|0 08-20 17:21:42.671:调试/PowerManagerService(2707):setLightBrightness: mButtonLight:0 08-20 17:21:43.666:信息/ALSAModule(2588):终止 ALSA PLAYBACK 设备 hifi 08-20 17:21:44.086: 错误/yamaha::media::Parameters(2588): SalesCode = OPS 08-20 17:21:51.181:WARN/ActivityManager(2707):启动超时已过期, 放弃唤醒锁! 08-20 17:21:51.336:警告/活动管理器(2707): HistoryRecord{40a6f0a8 的活动空闲超时 com.squirculardesign.android.pixel/.About} 08-20 17:21:56.456: 调试/dalvikvm(2929):GC_EXPLICIT 释放 672K,53% 释放 3917K/8327K, 外部 12588K/12670K,暂停 121ms 08-20 17:22:01.876: 信息/状态栏策略(2834):onSignalStrengthsChanged 08-20 17:22:04.006:调试/电池服务(2707):更新开始 08-20 17:22:04.011:错误/电池服务(2707):TMU 状态 = 0 08-20 17:22:04.011:调试/电池服务(2707):更新电池级别:79 规模:100 状态:2 健康:2 存在:真实 电压:4050 温度: 270 技术:锂离子交流电供电:假 USB 供电:​​真图标:17302229

【问题讨论】:

  • 你能从 logcat 中发布错误吗?
  • 已添加,希望我复制了正确的部分??还;格式很糟糕。
  • 只是说,测试一个确切的 SDK 版本号是个坏主意。至少您应该 >= 与未来版本兼容(当您无法检查特定功能时)。
  • 我最初确实将它设置为 >=,并且我一直打算在任何类型的发布之前将其设置为 >=,但是在我从逻辑上查看它并且无法解决我的错误之后,我开始修补可能会绊倒它的事情。
  • 匿名回答是我解决这个问题的答案。

标签: android


【解决方案1】:

这似乎总是发生,我问了这个问题,在解释之后问题在我的脑海中变得更加清晰,因此不在上下文中的人可以理解......

我找到的解决方法是:

//Sets the icon to 'go home' button
@Override
protected void onStart() {
    int versionNumber = Integer.valueOf(android.os.Build.VERSION.SDK);
    if (versionNumber >= 11) {
            super.onStart();
            ActionBar actionBar = this.getActionBar();
            actionBar.setDisplayHomeAsUpEnabled(true);
    }
    else {
            super.onStart();
    }
}

这解决了 Gingerbread 和 FroYo 中的问题,区别在于 super.onStart();我们无论如何都触发了。

对于那些不可避免地要评论我的 hackish/粘性胶带修复的人:这个特殊的应用程序并不总是需要 ActionBar,我只是使用 Honeycomb 中的 ActionBar 项目,因为它已成为 UI 实践来获得更多行动。这就是为什么我没有实施 Ac

【讨论】:

  • 这是我找到的答案,但必须匿名发布,因为在我的代表 > 100 之前我无法在 8 小时内发布我自己问题的答案,所以请 +1 我的问题,这样我就可以了:P.
  • 为什么不先 super.onStart(),然后在 if 和 bin 中做 action bar 行?
【解决方案2】:

您是否记录了 versionNumber 实际上是什么?我猜你的 if 语句在某种程度上是正确的。所以尝试记录 versionNumber 等于什么。

你真的应该使用

int versionNumber = android.os.Build.VERSION.SDK_INT

【讨论】:

    【解决方案3】:

    也检查一下:

    public boolean onOptionsItemSelected(MenuItem item) {
    
    if(item.getItemId()==android.R.id.home){
        Intent intent = new Intent(this, YourHomeActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        return true;
    }
    

    您必须声明“item.getItemId()==android.R.id.home”和十个“给”您的 Home Activity 的名称“YourHomeActivity.class”。 现在,当有人按下“向上”按钮时,您将被重定向到您的主页活动“YourHomeActivity.class”。

    【讨论】:

      猜你喜欢
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多