Android Studio学习#2
活动的生命周期和启动
- 实验目的
- 实验内容
- 实验步骤
- 一、新建Activity并初始化
- 二、尝试初运行并添加对话回显
- 三、在活动间切换&调试
- 四、验证系统可能自行对活动运行onDestroy
- 五、利用saveinstantstate处理系统自行运行onDestroy而导致数据丢失的情况
- 六、standard, singleTop, singleTask三种启动模式之间的区别点
实验目的
理解Android Studio的活动调用过程和生命周期
实验内容
1、通过在不同的活动之间的转换,观察onCreate, onStart, onResume, on Pause, onStop,onDestroy以及onRestart函数的调用情况。
2、通过实验说明存在系统可能自行对活动运行onDestroy。
3、利用saveinstantstate处理系统自行运行onDestroy而导致数据丢失的情况
4、通过实验说明活动的standard, singleTop, singleTask三种启动模式之间的区别点。
5、说明活动singleInstance启动模式的功能
实验步骤
一、新建Activity并初始化
1.在activity中new两个新empty activity,重命名为normal和dialog
2.在两个activity的layout中分别添加不同的显示,这里在Normal中添加textView,dialog中不用做修改,用以弹出对话框即可,但是要在Manifest里更改activity样式。
<activity android:name=".dialog"android:theme="@style/Theme.AppCompat.Dialog"></activity>
3.在value-strings中添加两个词条,用以快速连接text
<string name="button_normal_name">Goto normal activity</string><string name="button_dialog_name">Goto dialog activity</string>
4.在MainActivity中添加两个button,分别点击text右侧的长条选择上述两个词条
5.最后添加代码,new两个button,并新建点击事件setOnClickListener
@Overrideprotected void onCreate(@NonNull Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button=(Button) findViewById(R.id.button_normal);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(MainActivity.this,normal.class);startActivity(intent);}});Button button1=(Button) findViewById(R.id.button_diolog);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent1=new Intent(MainActivity.this,diolog.class);startActivity(intent1);}});}
}
二、尝试初运行并添加对话回显
1.试运行很明显分为三个界面。分别如下:
(1)主界面
(2)普通界面
(3)对话框界面(半透明)
2.为了研究onCreate, onStart, onResume, on Pause, onStop,onDestroy以及onRestart函数的调用情况,添加如下代码用以回显
public static final String TAG = "1812190523";@Overrideprotected void onDestroy(){super.onDestroy();Log.d(TAG,"onDestroy:");}@Overrideprotected void onResume(){super.onResume();Log.d(TAG,"onResume:");}@Overrideprotected void onPause(){super.onPause();Log.d(TAG,"onPause:");}@Overrideprotected void onStop(){super.onStop();Log.d(TAG,"onStop:");}@Overrideprotected void onStart(){super.onStart();Log.d(TAG,"onStart:");}@Overrideprotected void onRestart(){super.onRestart();Log.d(TAG,"onRestart:");}
在 onCreate里创建如下:
Log.d(TAG,"onCreate:");
在button中添加
tmpData="I am changed";
在button1中添加
Log.d(TAG,tmpData);
三、在活动间切换&调试
---------- 在Logcat中筛选词条后即可观察 ----------
前言:科普一下Activity的四种状态:
1.Running状态:一个新的Activity的启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并,可与用户交互的激活装态;
2.Paused状态:当Activity被另一个透明或者Dialog样式的Activity覆盖时的状态,此时它依然与窗口管理器保持连接,系统继续维护其内部状态,他仍然可见,但是它已经失去焦点,故不可与用户交互。
3.Stopped状态:当Activity不可见时,Activity处于Stopped状态。当Activity处于此状态时,一定要保存当前数据和当前的UI状态,否则一旦Activity退出或关闭时,当前的数据和UI状态就丢失了。
4.Killed状态: Activity被杀掉以后或者被启动以前,处于Killed状态。这是Activity已从Activity堆栈中移除,需要重新启动CIA可以显示和使用。
以上四种状态,Running状态和Paused状态是课件的,Stopped状态和Killed状态时不可见的。
摘自https://blog.csdn.net/u014419014/article/details/78840218
1.首先打开软件,看到如下步骤
2.打开normal界面
3.退出normal界面
4.打开对话框
5.退出对话框
6.退出程序
看过前面的科普应该很容易理解实验结果,不再赘述
四、验证系统可能自行对活动运行onDestroy
直接举例,在主界面中,直接用屏幕翻转功能
五、利用saveinstantstate处理系统自行运行onDestroy而导致数据丢失的情况
首先在第四点的条件下,系统直接destroy会销毁数据。比如说先调用button的tmpData赋值语句后(I am changed),再调用button1中的Log.d时显示的也是I am changed,但是经过一次屏幕翻转就会清空这个tmpData的值,直接调用button1会显示I am original。
这时候,可以用saveinstantstate。
并再添加字符串提取
@Overrideprotected void onSaveInstanceState(Bundle outState){super.onSaveInstanceState(outState);outState.putString("IS",tmpData);}
在 onCreate里创建如下:
if(savedInstanceState!=null){String tmp=savedInstanceState.getString("IS");Log.d(TAG,tmpData);}
这两个的作用呢,是在不是发自用户的destroy后查找已经被赋值的语句,存储到名为IS的一个字符串中,并再重新启动后赋值。
六、standard, singleTop, singleTask三种启动模式之间的区别点
直接贴代码,新建一个自己调用自己的活动
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button=(Button)findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(MainActivity.this,MainActivity.class);startActivity(intent);}});}
在下图中,可以设置launch mode为standard, singleTop, singleTask,singleInstance
<activity android:name=".MainActivity"android:launchMode="*******">
standard模式很好理解,相当于没有任何限制
在如下代码的情况下,只要你单击button就会一直产生新窗口界面(可以通过返回确认页面数)
<activity android:name=".MainActivity"android:launchMode="standard">
single top也很好理解,相当于限制置顶页面的创建,因为当前页面是置顶页面,那么就不能通过自己调用自己产生新的置顶页面
<activity android:name=".MainActivity"android:launchMode="singleTop">
singletask也很好理解,就是这个活动只能存在一个,在single top模式下,通过其他函数仍可以创建新的自己,但是在单task模式下,无论如何都只能同时存在1个
<activity android:name=".MainActivity"android:launchMode="singleTask">
附加题:singleInstance
singleInstance与singletask基本一致,但是singleinstance存在于另一任务栈中
比如activity A是singleInstance模式,当A启动后,系统会为它创建一个新的任务栈,然后A独自在这个新的任务栈中,由于栈内复用的特性,后续的请求均不会创建新的activity,除非这个独特的任务栈被系统销毁了
实验的话可以通过新建一个activity2页面设置为singleInstance模式,并设置任务id回显即可
Android Studio学习#2相关推荐
- Android Studio --- [学习笔记]TCP(第2弹)、GridView、ScrollView
说明 这篇主要接上一篇Android Studio - > [学习笔记]RadioButton.CheckBox.ImageView.ListView.TCP的三次握手 对上面回答的细解,并用J ...
- Android Studio --- [学习笔记]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手
说明 源代码 在2.x里有TCP的三次挥手与四次握手,先对它进行简单的回答(百度).预计在下一篇里,会继续说明TCP 接上一篇: Android Studio - > [学习笔记]Button. ...
- Android Studio 学习实例记录-手电筒
Android Studio 学习实例记录-手电筒 刚安装好Android Studio3.1.2,上网搜了一个实例进行实践学习,仅用这篇文章来记录学习过程 MainActivity.java的源码来 ...
- 安卓开发Android studio学习笔记12:读取解析XML(案例演示)
Android studio学习笔记 第一步:配置Student.XML 第二步:配置activity_main.xml 第三步:配置student.xml 第四步:配置Student用户类 第五步: ...
- android studio gradle 添加jar,android studio学习----通过gradle来导入jar包
转载地址:http://www.th7.cn/Program/Android/201507/495477.shtml File->Project Structure 可以打开下面的图: 1.通过 ...
- Android Studio学习记录之简单的页面切换及宫格菜单
Android Studio学习记录之简单的页面切换及宫格菜单 之前上课听老师讲的一些东西自己其实并没有消化,今天把不懂的都去网上搜了一下,有了一种恍然大悟的感觉,包括很多方方面面的东西.有些东西听说 ...
- 【Android Studio学习】第二篇、APP实现画简易的波形图
目录 第一部分.前言 1.效果展示 2.参考博客 3.实现方式 第二部分.详细步骤 1.添加波形函数的依赖 2.添加一个管理类 3.修改activity_main.xml文件的代码 4.修改MainA ...
- android studio 学习入门篇
开发第一应用 可以开发属于自己的应用,是否有点小激动?好吧!让我们开始,首先点击Start a new Android Studio Project创建工程: 接下来需要输入应用名称(第一个字母要大写 ...
- Android Studio 学习资料大全
Android Studio / Gradle学习资源 在说设置之前,先上点学习Android Studio和Gradle的学习资源. 官方教程 developer.android.com上的Andr ...
- 【安卓开发】android studio 学习入门篇
以下内容转载自:https://blog.csdn.net/myosotis5/article/details/79208707 (为防止链接失效,特备份文章内容,侵删) 开发第一应用 可以开发属于自 ...
最新文章
- Linux程序开机启动
- JVM调优:G1三色标记算法
- 十进制小数化为二进制小数的方法是什么_八进制转换成十进制,十进制转换成八进制...
- 新想法!华科、清华、康奈尔联合提出“圆形卷积”!聚合方形和圆形优势
- centos7 卸载安装失败的mysql7
- asp.net关于页面不回发,不生成__doPostBack方法问题的完美解决方案--ZT
- android 组件生命周期,Android组件化开发实践(五):组件生命周期管理
- js之如何获取css样式
- 传智播客 C/C++学习笔记 二级指针作为输出参数以及空间的释放
- 家庭版完全免费,下面的注册码为:avast! 4 pro(专业版)的
- Must Know Tips/Tricks in Deep Neural Networks (by Xiu-Shen Wei)
- curl 命令测试post请求
- 2022年信息学奥赛介绍
- STM32H7 at070tn92 LTDC SDRAM 调试笔记
- 论文中出现的 cf. i.e. s.t. e.g. w.r.t. et al. etc等英文缩写是什么意思
- Soapui报错There are currently 1 running SoapUI MockServices解决办法
- 【幺幺肆】低成本自制BT/PT下载用数据服务器(肆某带你自制NAS)--第一部分--前期准备
- Java Applet基础
- MySQL SELECT查询语句练习2(中级篇)
- 正大期货本周财经大事抢先看
热门文章
- 淘宝最基础的优化:标题优化
- 实时可视化大数据项目01 -- 项目介绍
- Sensor Flicker (Sensor banding现象)
- QNAP 威联通 NAS的个人使用经验 篇二:QTS系统各功能讲解
- STM32CubeIDE
- 网站URL如何SEO优化
- HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。
- ListNode的理解
- C++实现石头剪刀布
- python数据分析中data_dict={h:v for h,v in zip(header,zip(header,zip(*value)}的含义