根据android Activity Lifecycle,唯一保证被调用的回调(如果一个活动离开Running状态,这通常是预期的)onPause().
因此,我必须假设有些情况下实施它们是有意义的onStop(),onDestroy()尽管它们并没有真正保证被调用.
我理解,onStop()当一个活动可能通过Stopped状态返回Running状态时应该实现(为什么它会这样做而不是直接返回是一个不同的问题).
但是onDestroy(),当我可以将所有清理/状态保存放入时onPause(),需要我不清楚.
你能描述一下实际的应用情况(即不能驾驶汽车等),实施它是否合理onDestroy()?
我正在阅读ListFragment源代码,我看到了这个实现:
ListAdapter mAdapter;
ListView mList;
View mEmptyView;
TextView mStandardEmptyView;
View mProgressContainer;
View mListContainer;
CharSequence mEmptyText;
boolean mListShown;
/**
* Detach from list view.
*/
@Override
public void onDestroyView() {
mHandler.removeCallbacks(mRequestFocus);
mList = null;
mListShown = false;
mEmptyView = mProgressContainer = mListContainer = null;
mStandardEmptyView = null;
super.onDestroyView();
}
Run Code Online (Sandbox Code Playgroud)
在此函数中,Google开发人员将Null设置为在ListFragment中声明的所有视图字段,并删除回调"mRequestFocus".
在ListActivity源代码中.Google开发人员实施如下:
protected ListAdapter mAdapter;
protected ListView mList;
private Handler mHandler = new Handler();
@Override
protected void onDestroy() {
mHandler.removeCallbacks(mRequestFocus);
super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)
我没有看到Google开发人员在ListActivity的onDestroy上将Null设置为mList,就像他们为ListFragment类所做的那样.
我的问题是
为什么谷歌开发者没有在ListActivity的onDestroy中将Null设置为mList?有什么原因?
我们是否需要将Null设置为Activity的onDestroy和Fragment的onDestroyView中的所有View字段?
3.在这两个函数中设置Null的任何做法:Activity的onDestroy和Fragment的onDestroyView?
谢谢你的想法!
看一下Fragment的生命周期,我不确定这里可能发生的情况.当Fragment停止活动时,有两种可能的方法.
在哪种情况下完成了两种替代方案中的哪一种?是什么决定了他们中的哪一个?如果将一个片段添加到后台堆栈中,然后删除/替换,为什么不将它丢弃?为什么要保留它?
编辑:它突然出现在我身上,是否取决于片段是否被保留?

我使用EventBus之间的沟通Activity和Service.今天我遇到了问题,不知道为什么.
我有Activity,Fragment和Service.所有这些都很好.
在Activity和Fragment我们registered他们Receive events交付Service
在Activity和Fragment我un-register他们的时候onDestroy()被调用.
在正常情况下,当Services提供events,Fragment并Activity可以接收这些events,做工精良.
但是,当App上推background(通过按下Home或电源按钮),只Fragment接收从交付的事件Service,以及Activity不接收他们.
我没有做任何事情onPause()都的Activity和Fragment.
题:
那有什么解释吗?如何在应用程序被推送到后台时才能完成Activity接收事件Fragment?
service android background-process event-bus android-fragments
我知道onDestroy(...)不能保证调用Activity .根据文件,
在某些情况下,系统会简单地杀死活动的托管进程,而不会在其中调用此方法(或任何其他方法),因此不应该使用它来做那些意图在进程消失后留下来的东西.
这也适用于碎片吗?文档中没有任何内容,只是想确定.
Android 文档谈到 onStop 和 onDestroy 在某些情况下无法调用,但我没有发现任何与片段相同的内容。是否始终调用 onPause、onStop、onDestroyView、on Destroy 和 onDetach?仅在暂停时?
我已将 Google Maps MapView 添加到 Android 中的 Fragment。到目前为止,它是一张没有任何标记、选项或其他任何东西的清晰地图。尽管如此,每当我离开 Fragment 时,应用程序都会出现内存泄漏。
我已经尝试了我发现的所有建议的解决方案,例如将 MapView 附加到 Fragment Lifecycle,将其设置为不为 nullonDestroyView()等等,但内存泄漏仍然存在。
当前代码如下所示:
fragment_map.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.gms.maps.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
MapViewFragment.java
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_map, container, false);
mMapView = view.findViewById(R.id.mapView);
mMapView.onCreate(savedInstanceState);
mMapView.onResume();
MapsInitializer.initialize(Objects.requireNonNull(getActivity()).getApplicationContext());
mMapView.getMapAsync(googleMap -> {
mGoogleMap = googleMap;
});
return view;
}
@Override
public void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
public …Run Code Online (Sandbox Code Playgroud) android ×7
event-bus ×1
fragment ×1
google-maps ×1
java ×1
leakcanary ×1
lifecycle ×1
memory-leaks ×1
ondestroy ×1
service ×1