《android开发艺术探索》笔记:Activity界面跳转到透明主题界面,不调用onStop()方法
《探索》上说跳转透明主题的activity属于特殊情况,不调用当前activity的onstop()方法,当返回界面时候又会直接调用onResume()。这里做一个简单例子以增加对这种情况的理解:
正常界面跳转情况下activity跳转生命周期函数的调用(SecActivity为新界面):
MainActivity.onPause()->SecActivity.onCreate()->Sectivity.OnStart()->Sectivity.OnResume()->MainActivity.onStop();
新界面加载后点击返回键:
SecActivity.onPause()->MainActivity().onRestart()->MainActivity().onStart()->MainActivity().onResume()->SecActivity.onStop()->SecActivity.onDestroy();
跳转透明主题界面:
MainActivity.onPause()->SecActivity.onCreate()->Sectivity.OnStart()->Sectivity.OnResume();//未调用MainActivity.onStop();
新界面加载后点击返回键:
SecActivity.onPause()->MainActivity().onResume()->SecActivity.onStop()->SecActivity.onDestroy();//未调用Mainactivity的 onRestart()和onStart();
跳转示例代码:
在AndroidManifest.xml中注册新界面,令新界面主题为透明的代码:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
注册代码:
<activity android:name=".SecActivity"android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
MainActivity:
package com.example.lyx.test;import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;public class MainActivity extends AppCompatActivity {View.OnClickListener listener = new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent i = new Intent(MainActivity.this, SecActivity.class);startActivity(i);}};private Button btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.i("testApp", "MainActivity onCreate");btn = (Button) findViewById(R.id.StartSec_btn);btn.setOnClickListener(listener);}@Overrideprotected void onStart() {super.onStart();Log.i("testApp", "MainActivity onStart");}@Overrideprotected void onRestart() {super.onRestart();Log.i("testApp", "MainActivity onRestart");}@Overrideprotected void onResume() {super.onResume();Log.i("testApp", "MainActivity onResume");}@Overrideprotected void onPause() {super.onPause();Log.i("testApp", "MainActivity onPause");}@Overrideprotected void onStop() {super.onStop();Log.i("testApp", "MainActivity onStop");}@Overrideprotected void onDestroy() {super.onDestroy();Log.i("testApp", "MainActivity onDestroy");}
}
SecActivity:
package com.example.lyx.test;import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;public class SecActivity extends Activity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.sec_activity);Log.i("testApp", "SecActivity onCreate");}@Overrideprotected void onStart() {super.onStart();Log.i("testApp", "SecActivity onStart");}@Overrideprotected void onRestart() {super.onRestart();Log.i("testApp", "SecActivity onRestart");}@Overrideprotected void onResume() {super.onResume();Log.i("testApp", "SecActivity onResume");}@Overrideprotected void onPause() {super.onPause();Log.i("testApp", "SecActivity onPause");}@Overrideprotected void onStop() {super.onStop();Log.i("testApp", "SecActivity onStop");}@Overrideprotected void onDestroy() {super.onDestroy();Log.i("testApp", "SecActivity onDestroy");}
}
效果
启动app加载MainActivity:
跳转到SecActivity
点击返回按钮:
删除透明主题效果,即注销掉以下代码:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
跳转到SecActivity(调用了MainActivity.onStop):
返回键:
总结其他细节:
1.每次打开新界面,当前activity的onPause方法优先调用后,进行新界面的生命周期方法,最后调用当前activity的其他生命周期方法,我认为是为了更快的显示新界面才这样设计的;
2.onStop()方法调用后表示当前界面必定不可见了。所以当跳转透明界面或者显示dialog时候,不会调用onStop()方法,因为当前界面可见。
3.onResume()方法表示activity在前台可交互。
《android开发艺术探索》笔记:Activity界面跳转到透明主题界面,不调用onStop()方法相关推荐
- Android开发艺术探索笔记
<Android开发艺术探索>这本书在几年前就已经买了,陆陆续续看过几次,都没有看完,没有理解透. 最近重读<Android开发艺术探索>,读了两次,第一次读完感觉还有大量的知 ...
- Android开发艺术探索笔记(一) Activity的生命周期和启动模式(1)
Activity作为Android开发中最常用的一个组件,是Android开发人员必须熟悉且掌握的重要内容.同时Activity也是在面试中经常被问到的一个方向.因此,掌握Activity的重要性也不 ...
- Android开发艺术探索之Activity篇总结
本文内容来自<Android开发艺术探索>第一章,个人学习提炼总结,欢迎指正. 1.1典型情况下的生命周期 onCreate():表示Activity正在被创建,初始化布局资源+Activ ...
- Android开发艺术探索一 Activity
一:生命周期: 典型情况:onCreate - onRestart - onStart - onResume - onPause - onStop - onDestory 1.按back键:onPau ...
- Android 开发艺术探索笔记(17),android开发艺术探索
垃圾回收的相关工作,比如清楚数据 调用onDeatchFromWindow方法,在这个方法里结束进程.终止动画等 通过Session的remove方法删除Winodow,最终会调用WindowMana ...
- ViewRoot,DecorView,MeasureSpec和View的工作原理——Android开发艺术探索笔记
原文链接 http://sparkyuan.me/ 转载请注明出处 View的绘制流程是从ViewRoot的performTraversals方法開始的.它经过measure.layout和draw三 ...
- Android 开发艺术探索笔记(21),阿里P7级别面试经验总结
Looper的工作原理 就是Looper一直查看MessageQueue中是否有新消息,没有就一直阻塞,否则取出新消息. 在它的构造方法中它会先创建一个MessageQueue,然后将当前线程的对象保 ...
- Android开发艺术探索完结篇——天道酬勤
这片文章发布,代表着我已经把本书和看完并且笔记也发布完成了,回忆了一下我看Android群英传,只用了两个月,但是看本书却花了2016年05月04日 - 2018年07月16日,整整两年多,真是惭愧 ...
- Android开发艺术探索读书笔记(一)
首先向各位严重推荐主席这本书<Android开发艺术探索>. 再感谢主席邀请写这篇读书笔记 + 书评.书已经完整的翻完一遍了,但是还没有细致的品读并run代码,最近有时间正好系统的把整本书 ...
- 《Android 开发艺术探索》笔记2--IPC机制
<Android 开发艺术探索>笔记2--IPC机制 思维导图 Android IPC简介 Android中的多进程的模式 IPC基础概念 Serializable接口 Parcelabl ...
最新文章
- [企业化NET]Window Server 2008 R2[1]-服务器基本安装即问题解决记录
- maven打包 jar中没有主清单属性
- matplotlb.finance导包报错——ModuleNotFoundError No module named mpl finance
- 计算机任务驱动法教学应用,任务驱动教学法在计算机教学中的应用
- vue 定义全局弹框_用vue/react写一个全局提示弹框
- 工具类集和_gblfy版本
- 瑞幸咖啡自曝虚假交易 22 亿,App 反冲 TOP 1
- 银行业务光凭“刷脸”真的靠谱吗
- vue3子组件调用父组件的方法
- 数据分析师常用工具有哪些?初学者必看
- 怎么重置imac_如何重置Mac Pro?四种重置Macbook Pro的方法
- 玩家交互体验—剑网3好友系统
- 春招秋招笔试面试时间(2020年)
- 适合销售看的书都有哪些?销售方面的经典书籍推荐
- 2020年Andorid很详细的基础面试题
- java写 狐狸找兔子_狐狸找兔 算法分析
- Linux服务器卡顿如何排查
- 如何设置本电脑中的mysql让别人的电脑连接
- liferay监听器
- 推荐:电脑蓝屏代码分析工具BlueScreenView简体中文版下载
热门文章
- 刷主板bios改变机器码_怎么为主板刷新bios
- 借用传感器用计算机测速度题,图甲为利用距离传感器发出和接受超声波信号检测汽车速度的示意图.距离传感器发出的超声波遇到物......
- 武汉市最好的计算机专科学校,武汉中专排名前十位_武汉最好的3加2学校_武汉中专技校有哪些_计算机平面设计_365导学网...
- [CF632E] Thief in a Shop
- 在VirtualBox安装Ubuntu虚拟机实现文件夹共享
- 计算机考试outlook怎么发邮件,outlook怎么用,教您outlook使用方法
- BIO、NIO、AIO网络编程
- linux双击启动脚本文件
- lenovo L480 进入bios_rx5700刷bios秒变rx5700xt!rx5700刷rx5700xt bios图文教程
- macOS Big Sur 11.4 (20F71) 正式版(DMG、ISO、IPSW),百度网盘下载