当前位置: 首页 > 面试题库 >

方法不必要地被调用?

邹嘉石
2023-03-14
问题内容

我有一个BaseActivity,其他所有活动都可以对其进行扩展。关键是,每当用户离开活动时,我都会将音乐静音。我也停止听电话。
问题是,onPause只要用户在活动之间进行切换,就会被调用,这意味着该应用程序不必要地静音和停止telephonymanager,即使仅telephonymanager当用户离开该应用程序时该静音也应该停止。

@Override
    protected void onPause() {

        Log.v(TAG, "IN onPause!");
        // unregister phone listener to telephony manager
        tManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE);

        mute();

        super.onPause();
    }

现在说我在public class myClass extends BaseActivity和之间切换public class myOtherClass extends BaseActivity。即使我只想 在用户离开应用程序时* 被调用,此开关也 不必要
执行。我该怎么办?onPause``onPause
*

感谢您的专家意见,

丰富


问题答案:

据我了解,您是在暂停BaseActivity的情况下静音播放音乐,而不是将其写在您的Music play活动中

例如:

 public class BaseActivity extends AppCompatActivity{

     @Override
     public void onPause(){
      //do things that common for all activities
     }
    }


public void MusicPlayActivity extends AppCompatActivity{

 @Override
 public void onPause(){
 music.mute()
 }
}

这会工作

更新

有几种方法可以检测应用程序是否在后台运行,但是只有其中一种是完全可靠的:自己使用Activity.onPauseActivity.onResume方法来跟踪应用程序的可见性。将“可见性”状态存储在其他一些类中。

示例 :实现自定义Application类(请注意isActivityVisible()静态方法):

公共类MyApplication扩展了Application {

  public static boolean isActivityVisible() {
    return activityVisible;
  }

  public static void activityResumed() {
    activityVisible = true;
  }

  public static void activityPaused() {
    activityVisible = false;
  }

  private static boolean activityVisible;
}

在AndroidManifest.xml中注册您的应用程序类:

<application
    android:name="your.app.package.MyApplication"
    android:icon="@drawable/icon"
    android:label="@string/app_name" >

添加onPause并添加onResume到项目中的每个Activity中(如果您愿意,可以为您的Activity创建一个共同的祖先,但是如果您的Activity已经从MapActivity
/ ListActivity等扩展了,您仍然需要手工编写以下内容):

@Override
protected void onResume() {
  super.onResume();
  MyApplication.activityResumed();
}

@Override
protected void onPause() {
  super.onPause();
  MyApplication.activityPaused();
}

在API级别14(Android
4.0)中添加了ActivityLifecycleCallbacks。您可以使用它们来跟踪用户当前是否可以看到应用程序的活动。有关详细信息,请查看下面的Cornstalks答案。



 类似资料:
  • 我试图解决一个具有时间窗约束的车辆路径问题,如果没有找到可行的解决方案,则允许解算器删除节点。然而,我发现在添加析取之后,即使施加了很大的惩罚,也会不必要地删除节点。 下面是一个简单的示例程序,以说明该问题。解算器将删除节点1并返回0的解- 我是不是走错了方向?任何帮助都将不胜感激。

  • 问题内容: 在我拥有的一个小程序(尤其是cgo调用)上,go build和go run非常慢。我想缓存二进制文件,以便仅在源文件较新时才重建。我会使用带有%规则的简单Makefile,但是语言设计人员声称go的构建支持不需要Makefile。 我还有其他选择吗?go社区是否愿意使用另一个构建系统(可能是基于哈希的构建系统)来缓存和重用构建产品? 问题答案: 我写了一个工具来解决这个问题。单独不会检

  • 问题内容: 调用声明为的Java方法时,JVM运行时必须执行哪些常规步骤? HotSpot 1.8.0 JVM如何实现JNI函数调用?涉及哪些检查步骤(例如,返回后未处理的异常?),JVM要执行哪些簿记操作(例如,本地引用注册表?),并且在调用本机Java方法之后控件将移至何处?如果有人可以提供本机HotSpot 1.8.0代码的入口点或重要方法,我也将不胜感激。 免责声明:我知道我自己可以阅读代

  • 我在用 使用G1垃圾收集器。JVM参数是 然而,我在没有任何明显原因的情况下经历了完整的GC扫描,如何摆脱它们? GC日志,带有前面事件的一些尾部: 其他类似的: 其他类似问题报告: http://grokbase.com/t/openjdk/hotspot-gc-use/1192sy84j5/g1c-strange-full-gc-behaviorhttp://grokbase.com/p/op

  • 问题内容: 这个问题既是编程的一半,也是数学的一半。我想通过一条曲线对点集进行插值,而又不添加不必要的极值,而这些极值保持“接近线性插值”,同时保持一条看起来平滑的曲线。我知道这种表述是模糊的,但是我希望通过一个例子可以使它更加清楚。让我们看一下下面的代码和结果: 我本来希望只有两个极值(大约x〜0和x〜2)的插值,而这里我们有5个极值。如果我们要求他们手工绘制一条平滑曲线的点,这就是大多数人会画