在我的应用中,我有一个子类,它扩展了 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/