java - 方法不必要地被调用?

标签 java android performance inheritance methods

我有一个 BaseActivity,它可以通过其他所有 Activity 进行扩展。问题是,每当用户离开(暂停) Activity 时,我都会将音乐静音。我也不再接听电话。 问题是,只要用户在 Activity 之间切换,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 BaseActivitypublic class myOtherClass extends BaseActivity 之间切换。此开关不必要执行onPause,即使我只想当用户离开应用时调用onPause 。我该怎么办?

感谢专家的建议

丰富

最佳答案

据我了解,您正在将 BaseActivity 的 onPause 中播放的音乐静音,而不是将其写入您的音乐播放 Activity 中

例如:

 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()静态方法):

公共(public)类 MyApplication 扩展了应用程序{

  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" >

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

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

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

ActivityLifecycleCallbacks在 API 级别 14 (Android 4.0) 中添加。您可以使用它们来跟踪应用程序的 Activity 当前是否对用户可见。检查Cornstalks' answer以下为详细信息。

关于java - 方法不必要地被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33657102/

相关文章:

java - 异常在线程 "main"java.lang.UnsatisfiedLinkError : no lwjgl in java. library.path

java - 在 Android 应用程序中解析 Java 生成的图像

SQL Server - 提高小数精度/小数位数的性能

silverlight - 使用数据绑定(bind)实现 MVVM 模式时,Silverlight 应用程序的性能是否会受到影响?

java - setter 和 getter 是 java 中的编码标准还是我们可以写下我们的愿望?

java - 选择取一个结果返回null

android - Dagger 2 注入(inject)器并使用 IntKey 绑定(bind) IntoMap

java - Windows 上的 Helios Eclipse java 调试器突出显示源代码非常慢

java - 通过示例检查 Spring 性能和瓶颈的工具

android - 是否可以使用移动谷歌地图传感器获取我当前位置的邮政编码?