Activity A启动Activity B它们的生命周期变化(及设置Activity的透明度)

当活动启动另一个活动的时候,应该考虑被启动的活动的可见性。
1.当Activity B 覆盖A导致A完全不可见时:
两个活动的生命周期变化为:

//【1】部署程序
D/MainActivity: onCreate------A
D/MainActivity: onStart-------A
D/MainActivity: onResume------A

//【2】点击A中的按钮开始跳转到B
D/MainActivity: onPause-------A
D/SecondActivity: onCreate----B
D/SecondActivity: onStart-----B
D/SecondActivity: onResume----B
D/MainActivity: onStop--------A

//【3】然后点击返回键从B返回A
D/SecondActivity: onPause-----B
D/MainActivity: onRestart-----A
                onStart-------A
D/MainActivity: onResume------A
D/SecondActivity: onStop------B
D/SecondActivity: onDestroy---B

2.当Activity B背景被设置为透明(相当于发生跳转后,A部分可见)
它们的生命周期的变化为:

//【1】部署程序
D/MainActivity: onCreate------A
D/MainActivity: onStart-------A
D/MainActivity: onResume------A

//【2】点击A中的按钮开始跳转到B
D/MainActivity: onPause-------A
D/SecondActivity: onCreate----B
D/SecondActivity: onStart-----B
D/SecondActivity: onResume----B

//【3】然后点击返回键从B返回A
D/SecondActivity: onPause-----B
D/MainActivity: onResume------A
D/SecondActivity: onStop------B
D/SecondActivity: onDestroy---B

总结:当A启动B时,并且启动之后A还处于部分可见状态,当启动完B之后并不回调A的onStop()方法。
Activity的生命周期图:
在这里插入图片描述
小笔记:(设置Activity的透明度为半透明)

//【1】AndroidManifest.xml里的Activity标签里配置透明主题:
android:theme="@android:style/Theme.Translucent.NoTitleBar"

//【2】一般创建Activity的时候都是默认继承AppCompatActivity的(这种情况下设置透明主题程序会崩溃),需要继承自Activity
public class MainActivity extends Activity {...}

第二部中设置透明主题的时候因为Theme.AppCompat中没有Translucent,因此会导致程序崩溃。

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Gif-Load-ReTry-Refresh:只需要一张Gif图,一行代码支持初次加载,重试加载,加载后再次刷新原理 :遍历View树,在Framelayout中动态插入和移除加载布局,与生命周期绑定,避免内存泄漏;功能 :目前支持在Activity,Fragment中使用(支持任何方式实现的沉浸式状态栏和透明状态栏);封装 :接口化调用,支持MVP结构中使用(View层implement LoadRetryRefreshListener接口,然后直接在Activity/Fragment传入this即可)。示例Activity中加载成功Activity中加载失败在Activity中加载成功,然后再次加载刷新在Activity中加载失败,然后重试加载,加载成功后刷新加载Fragment中加载成功Fragment中加载失败在Fragment中加载成功,然后再次加载刷新在Fragment中加载失败,然后重试加载,加载成功后刷新加载使用   初步配置引入配置属性示例代码在Activity中使用1、注册2、开始加载3、加载结果回调4、解除绑定布局代码(勿遗漏第4步,防止内存泄漏)在Fragment中使用1、注册2、开始加载3、加载结果回调4、解除绑定布局代码(勿遗漏第4步,防止内存泄漏)反馈与建议初步配置引入Step 1. Add it in your root build.gradle at the end of repositories:allprojects { repositories { ... maven { url 'https://jitpack.io' } } }Step 2. Add the dependencydependencies {         compile 'com.github.NoEndToLF:Gif-Load-ReTry-Refresh:1.1.2' }配置属性方法参数作用setGifR.drawable.*加载页面的Gif图setBackgroundColorR.color.*加载页面整体背景颜色setBtnNormalColorR.color.*加载页面按钮未按下时的颜色setBtnPressedColorR.color.*加载页面按钮按下时的颜色setBtnBorderColorR.color.*加载页面按钮边框的颜色setBtnTextColorR.color.*加载页面按钮文字的颜色setBtnRadiusFloat加载页面按钮的圆角弧度setBtnTextString加载页面按钮的显示文字setLoadTextString正在加载中的提示文字setLoadAndErrorTextColorR.color.*加载页面的提示文字和加载失败提示文字的颜色示例代码,建议在 Application的 onCreate中进行初始化LoadRetryRefreshConfig config=new LoadRetryRefreshConfig();         config.setBackgroundColor(R.color.white);         config.setBtnNormalColor(R.color.blue_normal);         config.setBtnPressedColor(R.color.blue_press);         config.setBtnBorderColor(R.color.oringe_normal);         config.setBtnRadius(10f);         config.setBtnText("点击重新加载");         config.setLoadText("测试加载2秒钟...");         config.setBtnTextColor(R.color.white);         config.setLoadAndErrorTextColor(R.color.gray);         config.setGif(R.drawable.zhufaner);                 LoadReTryRefreshManager.getInstance().setLoadRetryRefreshConfig(config);在 Activit中使用布局中,请在 Toolbar下的需要加载的内容最外层套一层 FrameLayout(为何需要这样做),如:<LinearLayout android:layout_width="match_parent"     android:layout_height="match_parent"     xmlns:app="http://schemas.android.com/apk/res-auto"     android:orientation="vertical"     xmlns:android="http://schemas.android.com/apk/res/android">     <android.support.v7.widget.Toolbar         app:contentInsetStart="0dp"         android:layout_width="match_parent"         android:layout_height="?attr/actionBarSize"         android:gravity="center_vertical"         android:id="@ id/toolbar"         android:background="@color/color_toolbar"         >         <FrameLayout             android:layout_width="match_parent"             android:layout_height="match_parent">                          **********************************             **********************************             你的内容布局,如Linearlayout等            **********************************             **********************************                           </FrameLayout></LinearLayout>代码中方法简介方法参数作用registerActivity,LoadRetryRefreshListener注册startLoadActivity开始加载unRegisterActivity解除绑定onLoadSuccessActivity,ShowRefreshViewListener关闭加载View和刷新时的Dialog、下拉刷新等onLoadFailed  Activity,String,ShowRefreshViewListener显示加载失败原因,关闭加载View和刷新时的Dialog、下拉刷新等1、注册,一般在 onCreate中调用LoadReTryRefreshManager.getInstance().register(this, new LoadRetryRefreshListener() {                       @Override             public void loadAndRetry() {                         //执行你的网络请求             //dosomething();             }            @Override             public void showRefreshView() {                         //显示你刷新时的加载View,如Dialog,下拉刷新等                              }         });2、开始加载,无需判断是初次加载还是刷新,已自动进行判断,只需要在想要加载或刷新的地方直接调用(加载失败重试加载已封装到 Button事件中)LoadReTryRefreshManager.getInstance().startLoad(this);3、加载结果回调,在你的请求成功和失败的回调中加入加载结果回调@Override             public void onSuccess(Integer value) {             //加载成功你要做的事.....                              //加载结果回调                 LoadReTryRefreshManager.getInstance().onLoadSuccess(FailedActivity.this,                  new ShowRefreshViewListener() {                     @Override                     public void colseRefreshView() {                      //关闭你的刷新View,如Dialog,下拉刷新等                       }                 });             }             @Override             public void onFailed(Throwable e) {             //加载失败你要做的事.....                              //加载结果回调                 LoadReTryRefreshManager.getInstance().onLoadFailed(FailedActivity.this,                  e.getMessage(), new ShowRefreshViewListener() {                     @Override                     public void colseRefreshView() {                        //关闭你的刷新View,如Dialog,下拉刷新等                     }                 });             }4、解除绑定,可以直接写在 BaseActivity的 onDestory方法中,会自动判断然后进行解绑Override     protected void onDestroy() {                 super.onDestroy();                  LoadReTryRefreshManager.getInstance().unRegister(this);     }在 Fragment中使用布局中,同 Activity中使用一致,请在 Toolbar下的需要加载的内容最外层套一层 FrameLayout(为何需要这样做)代码中方法简介方法参数作用registerFragment,View,LoadRetryRefreshListener注册(View为Fragment在onCreateView中返回的View)startLoadFragment开始加载unRegisterFragment解除绑定onLoadSuccessFragment,ShowRefreshViewListener关闭加载View和刷新时的Dialog、下拉刷新等onLoadFailedFragment,String,ShowRefreshViewListener显示加载失败原因,关闭加载View和刷新时的Dialog、下拉刷新等1、注册,一般在 onCreateView中调用LoadReTryRefreshManager.getInstance().register(this, contentView,new LoadRetryRefreshListener() {             @Override             public void loadAndRetry() {             //执行你的网络请求             //dosomething();             }             @Override             public void showRefreshView() {             //显示你刷新时的加载View,如Dialog,下拉刷新等                              }         });2、开始加载,无需判断是初次加载还是刷新,已自动进行判断,只需要在想要加载或刷新的地方直接调用(加载失败重试加载已封装到 Button事件中)LoadReTryRefreshManager.getInstance().startLoad(this);3、加载结果回调,在你的请求成功和失败的回调中加入加载结果回调@Override             public void onSuccess(Integer value) {             //加载成功你要做的事.....                              //加载结果回调                 LoadReTryRefreshManager.getInstance().onLoadSuccess(FailedActivity.this,                  new ShowRefreshViewListener() {                     @Override                     public void colseRefreshView() {                      //关闭你的刷新View,如Dialog,下拉刷新等                       }                 });             }             @Override             public void onFailed(Throwable e) {             //加载失败你要做的事.....                              //加载结果回调                 LoadReTryRefreshManager.getInstance().onLoadFailed(FailedActivity.this,                  e.getMessage(), new ShowRefreshViewListener() {                     @Override                     public void colseRefreshView() {                        //关闭你的刷新View,如Dialog,下拉刷新等                     }                 });             }4、解除绑定,可以直接写在 BaseFragment的 onDestroyView方法中,会自动判断然后进行解绑@Override     public void onDestroyView() {         super.onDestroyView();         LoadReTryRefreshManager.getInstance().unRegister(this);     }为何必须在布局中套一层 FrameLayout目前为了在4.4,5.0,6.0,7.0及以上的版本中实现沉浸式状态栏或者是透明式状态栏的适配,实现方式主要在低版本中有所不同,有的是设置全屏然后给Toolbar加一个PaddingTop来留出StatusBar的高度,有的是设置全屏StatusBar透明,然后再动态插入一个大小一致的View来占位,达到设置状态栏颜色的目的,因此,如果单纯的在DecorView中来插入加载布局,难以控制加载页面的MarginTop,可能会遮盖到Toolbar,所以退而求其次,在布局中需要加载的部分包一层FrameLayout,再通过递归View树来找到需要添加加载布局的地方,进行动态插入,这样就不需要处理兼容沉浸式状态栏或者是透明式状态栏的适配造成的问题(当然如果有更好的想法,强烈欢迎Issues或者邮箱建议)
Android开发中,Activity是应用程序的基本组件之一,它负责提供用户界面和用户交互。当用户执行不同的界面操作时,Activity生命周期会发生变化。以下是常见的几种用户界面操作和相应的Activity生命周期变化: 1. 启动Activity:当用户启动一个Activity时,系统会按照以下顺序调用Activity生命周期方法: - onCreate():Activity被创建。 - onStart():Activity变得可见但无法与用户交互。 - onResume():Activity变得可见且可以与用户交互。 2. 关闭Activity:当用户关闭一个Activity时,系统会按照以下顺序调用Activity生命周期方法: - onPause():Activity失去焦点,但仍然可见,用于保存快速恢复的状态。 - onStop():Activity不再可见,可以被系统回收。 - onDestroy():Activity被销毁。 3. 切换到后台:当用户切换到其他应用或按下Home键时,当前Activity会进入后台,系统会按照以下顺序调用Activity生命周期方法: - onPause():Activity失去焦点,但仍然可见,用于保存快速恢复的状态。 - onStop():Activity不再可见,可以被系统回收。 4. 返回前台:当用户从后台返回应用时,当前Activity会重新进入前台,系统会按照以下顺序调用Activity生命周期方法: - onRestart():Activity重新启动。 - onStart():Activity变得可见但无法与用户交互。 - onResume():Activity变得可见且可以与用户交互。 需要注意的是,Activity生命周期方法在不同情况下可能会被系统回调,但并不保证每个生命周期方法都会被调用。例如,当系统内存不足时,Activity可能会被销毁而不经过onStop()和onDestroy()方法。 以上是用户不同界面操作时Activity生命周期的一般变化,具体情况还取决于应用程序的实现和开发者对生命周期方法的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值