fragment跳转生命周期
时间: 2023-10-18 18:05:36 浏览: 168
Fragment的生命周期包括以下几个方法:
1. onAttach():当Fragment与Activity建立关联时调用。
2. onCreate():当Fragment被创建时调用。
3. onCreateView():创建Fragment的视图时调用。
4. onActivityCreated():当Activity完成onCreate()方法时调用。
5. onStart():当Fragment可见时调用。
6. onResume():当Fragment进入前台并开始活动时调用。
7. onPause():当Fragment进入后台并停止活动时调用。
8. onStop():当Fragment不可见时调用。
9. onDestroyView():当Fragment的视图被销毁时调用。
10. onDestroy():当Fragment被销毁时调用。
11. onDetach():当Fragment与Activity解除关联时调用。
在跳转到另一个Fragment时,当前Fragment会经历onPause()、onStop()、onDestroyView()和onDetach()方法。而新的Fragment会经历onAttach()、onCreate()、onCreateView()、onActivityCreated()、onStart()和onResume()方法。
相关问题
activity跳转fragment 各自的生命周期
### Android Activity 跳转 Fragment 生命周期详解
#### Activity 和 Fragment 的生命周期交互
当从 `Activity` 切换至 `Fragment` 时,两者之间的生命周期会紧密协作并相互影响。具体来说:
- **启动过程**
在首次进入 `MainActivity` 并加载第一个 `Fragment` 时,`Activity` 首先经历其自身的初始化阶段,即依次触发 `onCreate()` -> `onStart()` -> `onResume()` 方法[^1]。
紧接着,对于新加入的 `Fragment` 实例而言,则按照顺序执行以下一系列方法来完成自己的创建流程:`onAttach()` -> `onCreate()` -> `onCreateView()` -> `onViewStateRestored()` -> `onActivityCreated()` -> `onStart()` -> `onResume()`[^2]。
此时整个界面处于前台可见状态,并且用户可以与之互动。
```java
// MainActivity.java 示例代码片段
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null){
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, new MyFragment())
.commit();
}
}
```
- **离开当前页面**
一旦发生由某个事件(比如点击按钮)引发向另一个 `Activity` 或者不同 `Fragment` 进行导航的动作,原 `Activity` 将开始走销毁路径的一部分操作——暂停(`onPause`)、停止(`onStop`)直至可能最终被回收(`onDestroy`)[^4];与此同时,任何已附加给该 `Activity` 下面的 `Fragment(s)` 同样也会相应地收到通知去处理各自的状态保存工作并通过调用诸如 `onSaveInstanceState()` 来准备即将发生的变动[^3]。
如果只是简单替换现有容器内的 `Fragment` ,则旧有的那个会被置入背景不可见模式 (`onPause`, `onStop`) 或完全摧毁 (`onDestroyView`, `onDestroy`),而新的将会重复之前提到过的构建步骤直到显示出来为止。
```java
// 替换Fragment示例代码
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, anotherFragment)
.addToBackStack(null)//可选参数用于管理返回堆栈
.commit();
```
- **返回前一页面**
按下 Back 键回到之前的 `Activity` 或 `Fragment` 上下文中,先前被隐藏起来的对象将重新激活它们的生命历程—恢复(`onRestart`)、重启(`onStart`)以及继续运行(`onResume`), 对于那些曾经短暂消失不见但仍保留着实例数据结构体的组件来讲更是如此。
而对于刚被移除掉的那个部分,则依据具体情况决定是否要彻底释放资源或是仅仅调整为后台等待状态以便将来快速重现。
---
从一个fragment跳转到目标activity同时删除目标activity的sharedpreferences的文件数据
在Android中,要从Fragment跳转到Activity并同时清除Activity的SharedPreferences数据,首先确保在Fragment中有保存SharedPreferences数据的相关逻辑。假设有个名为"PreferencesFragment"的Fragment,其在生命周期内保存了一些偏好设置。
在跳转到Activity之前,可以在Fragment的`onDestroyView()`或`onSaveInstanceState(Bundle outState)`方法中清理SharedPreferences:
```java
// 假设 preferencesFile 是 SharedPreferences 的实例
SharedPreferences.Editor editor = preferencesFile.edit();
editor.clear(); // 清除所有键值对
editor.apply(); // 立即应用更改
// 如果是在 onSaveInstanceState 中保存数据
outState.putInt("keyToRemove", 0); // 添加一个标记表示已清除数据
getActivity().finishAffinity();
```
然后在对应的Activity中,你可以覆盖`onCreate()`或`onNewIntent()`方法,检查是否有删除数据的标志:
```java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null && savedInstanceState.getInt("keyToRemove") > 0) {
// 这里假设 preferences 是 SharedPreferences 的实例
preferences.edit().clear().apply();
}
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// ...同样处理保存状态的逻辑
}
```
这样,每次从Fragment跳转回Activity时,SharedPreferences的数据都会被清空。记得在实际应用中检查是否真的需要这种操作,因为频繁地清空数据可能会导致用户体验不佳。
阅读全文