if (isAdded() && mContext != null) { }可以吗
时间: 2024-04-05 15:32:26 浏览: 90
可以,如果你在 `onAttach()` 方法中保存了 `Context` 的引用,那么在其他生命周期方法中使用 `mContext` 来代替 `getActivity()` 是没问题的,前提是你已经在 `onAttach()` 方法中对 `mContext` 进行了初始化。
`isAdded()` 方法用于判断 Fragment 是否已经与 Activity 关联,如果没有关联,那么调用 `getActivity()` 方法将返回 null,此时就不能使用 `getActivity()` 方法了,否则会抛出 `IllegalStateException` 异常。因此,使用 `isAdded()` 方法来判断 Fragment 是否已经与 Activity 关联是一个很好的习惯。
相关问题
private void updateShowSeconds() { if (mShowSeconds) { // Wait until we have a display to start trying to show seconds. if (mSecondsHandler == null && getDisplay() != null) { mSecondsHandler = new Handler(); if (getDisplay().getState() == Display.STATE_ON) { mSecondsHandler.postAtTime(mSecondTick, SystemClock.uptimeMillis() / 1000 * 1000 + 1000); } IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_SCREEN_ON); mContext.registerReceiver(mScreenReceiver, filter); } } else { if (mSecondsHandler != null) { mContext.unregisterReceiver(mScreenReceiver); mSecondsHandler.removeCallbacks(mSecondTick); mSecondsHandler = null; updateClock(); } } } private final BroadcastReceiver mScreenReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (Intent.ACTION_SCREEN_OFF.equals(action)) { if (mSecondsHandler != null) { mSecondsHandler.removeCallbacks(mSecondTick); } } else if (Intent.ACTION_SCREEN_ON.equals(action)) { if (mSecondsHandler != null) { mSecondsHandler.postAtTime(mSecondTick, SystemClock.uptimeMillis() / 1000 * 1000 + 1000); } } } }; private final Runnable mSecondTick = new Runnable() { @Override public void run() { if (mCalendar != null) { updateClock(); } mSecondsHandler.postAtTime(this, SystemClock.uptimeMillis() / 1000 * 1000 + 1000); } }; }
这是一个 Android 的代码段,主要是用于更新显示时间的。代码中使用了 Handler 和 BroadcastReceiver 来实现在屏幕开启时每秒更新一次时间的功能,同时在屏幕关闭时停止更新。同时还有一个 mShowSeconds 变量用于控制是否显示秒数。整个代码块看起来比较完整,但缺少了一些上下文信息,比如 mContext 是从哪里获取的等等。
private void updateShowSeconds() { if (mShowSeconds) { WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); int state = display.getState(); // Wait until we have a display to start trying to show seconds. if (mSecondsHandler == null && display != null) { mSecondsHandler = new Handler(); if (state == Display.STATE_ON) { mSecondsHandler.postAtTime(mSecondTick, SystemClock.uptimeMillis() / 1000 * 1000 + 1000); } IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_SCREEN_ON); mContext.registerReceiver(mScreenReceiver, filter); } } else { if (mSecondsHandler != null) { mContext.unregisterReceiver(mScreenReceiver); mSecondsHandler.removeCallbacks(mSecondTick); mSecondsHandler = null; updateClock(); } } }Android4.4 编译display.getState()报错
在Android 4.4中,`getState()`方法是在`Display`类中被添加的,因此该方法仅适用于API级别21及更高版本的Android。如果您在Android 4.4中使用`getState()`方法,编译器会报错。
如果您需要在Android 4.4中使用此功能,您可以考虑使用其他方法替代,例如检查屏幕是否亮着。您可以使用以下代码来检查屏幕状态:
```
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = powerManager.isScreenOn();
```
请注意,此方法仅检查屏幕是否亮着,并不提供更详细的屏幕状态信息。如果您需要更详细的信息,请考虑升级到更高版本的Android。
阅读全文