我有一个 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 BaseActivity
和 public 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.onPause
、Activity.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" >
将 onPause
和 onResume
添加到项目中的每个 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/