Fragment.onstart 在 Activity.onstart 之前被调用
Posted
技术标签:
【中文标题】Fragment.onstart 在 Activity.onstart 之前被调用【英文标题】:Fragment.onstart is being called before Activity.onstart 【发布时间】:2016-10-24 00:28:50 【问题描述】:MMuzammil: MainActivity:in onCreate
MMuzammil: FirstFragment:in onAttach
MMuzammil: FirstFragment:in onCreate
MMuzammil: FirstFragment:in onCreateView
MMuzammil: FirstFragment:in onActivityCreated
MMuzammil: FirstFragment:in onStart <----
MMuzammil: MainActivity:in onStart <----
MMuzammil: MainActivity:in onResume
MMuzammil: FirstFragment:in onResume
我们可以看到我的 Fragment.onStart 在 Activity.onStart 之前被调用。任何人都知道这种行为的原因是什么?因为当Activity移动到前台时,Activity的回调方法应该总是先调用
活动:
public class MainActivity extends AppCompatActivity
public static final String TAG = "MMuzammil";
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "MainActivity:in onCreate");
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new FirstFragment()).commit();
@Override
protected void onStart()
super.onStart();
Log.d(TAG, "MainActivity:in onStart");
@Override
protected void onResume()
super.onResume();
Log.d(TAG, "MainActivity:in onResume");
@Override
protected void onPause()
super.onPause();
Log.d(TAG, "MainActivity:in onPause");
@Override
protected void onStop()
super.onStop();
Log.d(TAG, "MainActivity:in onStop");
@Override
protected void onDestroy()
super.onDestroy();
Log.d(TAG, "MainActivity:in onDestroy");
@Override
protected void onRestart()
super.onRestart();
Log.d(TAG, "MainActivity:in onRestart");
【问题讨论】:
显示更多代码。打印日志的代码 @VladMatvienko 请立即查看 【参考方案1】:这只是因为,您正在调用 super.onStart(),然后在您的活动中打印日志。所以基本上你的活动的 onStart() 是首先运行的。
我猜:)
【讨论】:
我也在 Activity 中调用 super.onResume() 。为什么我的活动的 onResume() 日志会先运行? 有些时间日志的方式不一样。而且它也有所不同,因为系统(手机操作系统)可能在 Activity 的 onResume 和 Fragment 的 onResume 之间做更多的工作。它会因手机、操作系统和操作系统而异,但顺序将保持不变,这是毫无疑问的。【参考方案2】:这是正常行为。如果你需要在开始之前在片段中做一些事情,最好重写并使用 onAttach(Context context) 方法。
【讨论】:
没有意义。为什么在 onStart 之前调用的 onCreate 或在 onStart 之后调用的 onResume 不是这种情况?【参考方案3】:我也有同样的问题。
我将此添加到我的Fragment.onStart()
:
override fun onStart()
super.onStart()
launch
requireActivity().lifecycle.withStarted
// do work
【讨论】:
以上是关于Fragment.onstart 在 Activity.onstart 之前被调用的主要内容,如果未能解决你的问题,请参考以下文章
Activiti 流程部署方式 activi 动态部署(高级源代码篇)
android logcat中不显示log.d我的程序代码中包含Log.d(TAG,"activi
Ambiguous method call. Both findViewById (int) in AppCompatActivity and findViewById (int) in Activi