Android初级之路---------探究Activity
来源:互联网 发布:观察者模式例子java 编辑:程序博客网 时间:2024/05/01 11:17
<span style="font-size:24px;"> 1 ---------Activity是什么? </span>
<span style="font-size:24px;"> 它是一种可以包含用户界面的组件,主要是负责和用户交互的,它是Android应用程序的门面,凡是你在应用中看见的东西都是放在Activity中的。</span>
<span style="font-size:24px;"> 2 ------- 在Activity中使用Toast-------显示提示信息框 </span>
<span style="font-size:24px;"> Toast是Android系统提供的,它具有以下2个特点 </span>
<span style="font-size:24px;"> a---Toast提示信息不会获得焦点 </span>
<span style="font-size:24px;"> b---Toast提示信息过一段时间会自动消失 ]</span>
<span style="font-size:24px;"> Toast生成消息的步骤 </span>
<span style="font-size:24px;"> a---调用Toast的构造器或调用makeText()静态方法创建一个Toast对象</span>
<span style="font-family: Arial, Helvetica, sans-serif;font-size:24px;"> b---调用Toast的方法来设置消息提示框的对齐方式,页边距等 </span>
<span style="font-family: Arial, Helvetica, sans-serif;font-size:24px;"> c---调用Toast的show()方法显示出来 </span>
<span style="font-family: Arial, Helvetica, sans-serif;font-size:24px;"> Toast的方法 </span>
<span style="font-family: Arial, Helvetica, sans-serif;font-size:24px;"> a---setGravity(int,int x,int y)设置消息出现在屏幕中位置,参数分别代表 Gravity, x方向的偏移,Y方向的偏移 </span>
<span style="font-family: Arial, Helvetica, sans-serif;font-size:24px;"> b---setView(view v)设置Toast显示自定义View </span>
<span style="font-family: Arial, Helvetica, sans-serif;font-size:24px;"> C---setDuration()设置显示时间 </span>
<span style="font-family: Arial, Helvetica, sans-serif;font-size:24px;">Toast总结:Toast功能比较简单,大部分它只可以显示简单的文本提示,如果应用需要显示诸如图片,列表之类复杂的提示,就需要用Toast的构造器来创建对象,再条用setView(view v)方法来设置Toast显示的View组件,该方法允许开发者自己定义View </span>
<span style="font-family: Arial, Helvetica, sans-serif;font-size:24px;"> 3 ------------------- 销毁一个Activity" </span>
<span style="font-family: Arial, Helvetica, sans-serif;font-size:24px;"> Activity类提供了一个finish()方法,我们在活动中调用一下这个方法就可以销毁当前活动</span>
<span style="font-family: Arial, Helvetica, sans-serif;font-size:24px;"> 4--------------------- 使用Intent在活动Activity之间穿梭 </span>
<span style="font-family: Arial, Helvetica, sans-serif;font-size:24px;"> a--- 一个Intent中只可以指定一个action,但却可以指定多个category </span>
<span style="font-family: Arial, Helvetica, sans-serif;font-size:24px;"> b--- 隐式启动一定要配置 </span><pre style="font-family: 宋体; font-size: 15.8pt; background-color: rgb(255, 255, 255);"> <<span style="color:#000080;"><strong>category </strong></span><span style="color:#660e7a;"><strong>android</strong></span><span style="color:#0000ff;"><strong>:name=</strong></span><span style="color:#008000;"><strong>"android.intent.category.LAUNCHER" </strong></span>/>
C---向下一个活动传递数据----Intent
Intent调用putExtra()把我们想传递的数据暂时放在Intent中,启动另外一个活动的时候,只需要从Intent中取出来:
首先通过getIntent()方法获得用于启动这个活动的Intent,再调用get..()对应的方法取得数据。
D---返回数据给上一个活动
Activity有一个StartActivityForResult()方法,这个方法期望在活动销毁的时候可以返回一个结果给上一个活动。其中有2个参数:第一个参数还是Intent,第二个参数是请求码,用于在之后的回调中判断数据的来源。
如:当前ActivityIntent intent =new Intent("android.intent.action.xxx"); intent.putExtra("chuan","你好"); startActivityForResult(intent,1);
启动的Activity的代码
Intent intent=new Intent();//构建一个Intent intent.putExtra("shuju-return","你好上一个活动"); setResult(RESULT_OK,intent);//这个方法是专门用于向上一个活动返回数据的,有2个参数,第一个参数一般使用RESULT_OK或RESULT_CANCELED这两个值,第二个参数就是把带有数据的Intent传递回去。finish();调用finish()销毁Activity由于我们使用startActivityForResult()来启动Activity,当这个Activity销毁的之后会回调上一个活动的onActivityResult()
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode){ case 1: if (resultCode==RESULT_OK){ String ss=data.getStringExtra("shuju-return"); Log.d("nihao",ss); }} }
onActivityResult中的三个参数,第一参数requestCode就是我们在启动活动时候的请求码
第二参数resultCode就是我们返回数据传入的处理结果第三个参数data就是返回数据Intent
当用户按下Back键,就会去调用onBackPress()方法的代码
5 -------------Activity的生命周期
1 首先的明白几件事情:Android中的Activity活动是可以层叠的
我们每启动一个新的活动,机会覆盖在原活动之上
点击Back键就会销毁最上面的活动,下面的活动就会显示来
2 Android中是有栈的形式来管理活动的:栈是一种后进先出的数据结构,这个栈也当称作返回栈。
3 Activity活动的4中状态:
运行状态:当一个活动处于在返回栈的栈顶时,此时的活动就处于运行状态,此时用户可见,可以获得焦点,系统最不愿意回收就是处于运行状态的活动,因为这会带来非常差的用户体验。
暂停状态:其他活动处于栈顶,但是这个活动依然可见,只是不可以获得焦点
停止状态:当一个活动不处于栈顶,且完全不可见的时候,就是停止状态
销毁状态:当一个活动从返回栈移除后就变成销毁状态
4活动生存期:Activity中定义了7个回调方法
onCreat():第一次创建Activity时被回调,该方法只被调用一次。
onStart()这个方法在活动由不可见变为可见的时候调用
onResume()这个方法在活动准备好和用户交互的时候被调用。此时的活动一定位于返回栈的栈顶,处于运行状态,在 onStart()之后一定会调用这个方法。 onpause()暂停的时候被回调
onStop()活动停止的时候被回调
onDestor()销毁的时候被调用
onRestart()活动有停止状态变为运行状态之前调用。
总结---------销毁活动会回调----onPause() onStop onDestor()
活动停止被回调的----onPause() onStop()
思考问题-----------Activity活动被回收了怎么办?
有一个活动A处于停止状态的时候,这个时候由于手机内存不足,将活动A回收掉了,当我们按返回键返回A活动时会出现什么情况?
答:还是会正常显示A活动,但是不会调用onRestart()方法,会调用onCreat()方法,因为这种情况下活动A会被重新创建一次,这样看上去好像一切正常,但是别忘记一个重要问题,活动A可能存在的临时数据和状态会被丢失,因为活动Activity被重新创建了。如果出现这种情况,是会严重影响用户体验的。
解决方案:Activity中提供一个onSaveInstanceState(Bundle bundle)方法
这个方法一定会在活动被销毁之前被调用,如下:
<span style="font-size:18px;"> @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("baocun","百度一下伟大的李清");//数据同过键值对的 } 形式保存</span>问题又来了,你保存了数据,那在哪里进行恢复?细心的你也许早就发现我们一直使用onCreat()中其实也有一个Bundle类型的参数,这个参数在一般情况下都是null,但是当活动在被系统回收之前有通过onSaveInstanceState(Bundle outState)方法来保存数据的话,那么这个参数就会带有之前所保存的所有的数据,我们只需要把数据取出来就可以了。
<span style="font-size:18px;"> @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_log_cat); Log.d("nihao", "第一行代码"); if(savedInstanceState==null){ Log.d("nihao", "活动没有被销毁"); } if(savedInstanceState!=null){ String ss=savedInstanceState.getString("baocun"); Log.d("nihao", ss); } }</span>
6---------活动的启动模式:一共有4中 standard singleTop, singleTask singleInstance
可以在AndroidManifest.xml中通过给<activity>标签指定android:launchMode属性来选择启动模式
standard :活动的默认启动模式,在不进行显示指定的情况下,所有活动所有活动都会使用这种启动模式,我们知道每到启动一个活动,它的实例就会在返回栈中入栈,并处于栈顶。对于standard模式的活动,系统不会在乎这个活动是否在返回栈中存在,每次启动都会重新创建该活动的一个新的实例并在返回栈中入栈。
singleTop:在启动活动时发现返回栈的栈顶已经是该活动了,则认为可以直接使用它,不会在在创建活动的实例。
singleTask:每次启动该活动时候,系统首先会在返回栈中检查是否存在该活动的实例,如果发现存在,则直接使用该实例,并把该活动实例之上的所有活动统统出栈,如果没有就会创建一个实例,这种启动模式保证了返回栈只存在一个该活动的实例。
singleInstance:这个模式下会有单独的一个返回栈来管理这种模式启动的活动,不管那个应用程序访问这个活动,都会共用同一个栈,也就解决共享活动的问题。
- Android初级之路---------探究Activity
- Activity之SharedPreferences探究
- Android Activity活动探究
- Android Activity探究活动
- [Android初级]android单元测试之Activity单独测试
- android安全机制的初级探究总结
- Android无基础----------------->Android初级之路
- Android之Intent探究
- Android中Activity启动过程探究
- Android中Activity启动过程探究
- Android中Activity启动过程探究
- Android中Activity启动过程探究
- android Activity 四大启动模式探究
- Android 探究Activity的启动模式
- Android初级之路01:自定义控件
- Android初级之路--------UI控件
- 探究Activity
- android进阶之旅,初级试水型探索(activity四种启动模式详解)
- iOS真机调试问题The certificate has either expired or has been revoked
- php中查找某一函数所在位置
- 算法竞赛入门经典(第2版)习题2-4详解
- B507实验室打印机连接方法
- eclipse解决jar包乱码
- Android初级之路---------探究Activity
- 树莓派3+触摸屏+键盘鼠标硬件连接和系统安装
- [Android Demo] 电子词典
- 电脑桌面的照片文件不见了怎么办
- AIDL/IPC Android AIDL/IPC 进程通信机制——超详细讲解及用法案例剖析(播放器)
- 我又回来了,互联网行业!
- LFW- results 翻译
- 关于前端的一些问题
- Android中异步任务AsyncTask的使用