java - Android 阻止 onPause 在父类中被调用

标签 java android android-fragments amazon-fire-tv

在我的应用中,我有一个子类,它扩展了 leanback 支持库中名为 SearchFragment支持库类。我需要扩展此类,但不幸的是父类 (SearchFragment) 的 onPause() 有一个我无法使用的方法。

每次我离开 Activity 时,父类都会运行 onPause() ,它会调用我不想要的方法。

有没有办法可以扩展 SearchFragment 类,但不允许它运行自己的 onPause()

这是父类中我无法更改的 onPause() 方法。

android.support.v17.leanback.app.SearchFragment

@Override
public void onPause() {
    releaseRecognizer(); //Need to stop this from calling
    super.onPause();
}

private void releaseRecognizer() {
    if (null != mSpeechRecognizer) {
        mSearchBar.setSpeechRecognizer(null);
        mSpeechRecognizer.destroy();
        mSpeechRecognizer = null;
    }
}

此外,我这样做的原因是因为这是 Android TV > Fire TV 端口。 Fire TV 没有语音识别器。

最佳答案

使用 Proguard assumenosideeffects 选项来消除对 SearchFragment 内的releaseRecognizer()方法的调用。这将要求您在启用 Proguard 的情况下编译代码,但由于相关代码是在某种特定场景中调用的,因此您可能只在发布版本中使用 Proguard。

请注意,您必须启用优化(dontoptimize 选项不得设置),因为通过 assumenosideeffects 剥离对方法的调用是从技术上讲是一种“优化”。

确保使用 this answer 中的建议将 Proguard 操作限制为您想要“优化”的特定类(在您的情况下 - android.support.v17.leanback.app.SearchFragment)。

<小时/>

这是在不修改 SearchFragment 源代码的情况下解决您的问题的唯一方法。再想一想,您可能最好只是将必要的类复制到您的项目中,或者在最坏的情况下 - 将整个 Leanback 支持库作为 Gradle 子模块插入并直接修改必要的方法(Fire TV 很可能还有其他问题)除了这个)。

关于java - Android 阻止 onPause 在父类中被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38987354/

相关文章:

java - 使用 android SharedPreferences 在单独的 Activity 中保存和重用值(非常基本的应用程序)

java - 动态替换 Android fragment

java - 将 Java 日期时间与当前时间进行比较

java - WSSE - 在 soapenv :Header 中签署一个元素

android - 480x800 和 800x480 一样吗?

android - 为每部手机自动更新 vcard

android - 如何在 Activity 中成功地将内容显示为来自 RunningFragment 类的 Fragment?

java - 从 ViewHolder 获取适配器实例

Java 可执行 .jar 文件无法播放外部资源中的 MP3 文件

java - 为 HTTPSURLConnection 设置 TLS 协议(protocol)