Android的activity学习笔记

一、什么是activity

     Activity
是顾客接口程序,原则上它会提供给客户七个交互式的接口功效。它是 android
应用程序的基本作用单元。Activity
自身是绝非分界面包车型地铁。所以activity类成立了三个窗口,开荒职员能够经过setContentView(View)接口把UI放到activity成立的窗口上,当activity指向全屏窗口时,也得以用别样情势贯彻:作为漂浮窗口(通过windowIsFloating的主旨联谊),只怕放置到其他的activity(使用ActivityGroup)。activity是独立的,用于拍卖客商操作。大概全数的activity都要和客商打交道,

二、activity生命周期

冠亚体育手机网站 1  

public class Activity extends ApplicationContext {

protected void onCreate(Bundle savedInstanceState);

protected void onStart();

protected void onRestart();

protected void onResume();

protected void onPause();

protected void onStop();

protected void onDestroy();

}

相信广大冤家也曾经看过那几个流程图了,也基本精通了Activity生命周期的多少个经过,大家就来讲一说那么些经过。
1.起步Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity踏入运营状态。
2.脚下Activity被此外Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的进行。
3.脚下Activity由被遮掩意况回到前台或解锁屏:系统会调用onResume方法,再一次步向运转状态。
4.脚下Activity转到新的Activity分界面或按Home键回到主屏,本身退居后台:系统会先调用onPause方法,然后调用onStop方法,步入停滞状态。
5.顾客后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最终调用onResume方法,再度步入运转状态。
6.当前Activity处于被隐瞒景况也许后台不可以知道状态,即第2步和第4步,系统内部存款和储蓄器不足,杀死当前Activity,而后用户退回当前Activity:再一次调用onCreate方法、onStart方法、onResume方法,踏入运市价况。
7.客户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,截至近来Activity。
由图可以见到:

  在三个Activity经常运转进度中,那么些艺术调用的逐条是onCreate ->
onStart -> onResume;在Activity被kill掉的时候方法顺序是onPause ->
onStop ->
onDestroy,此为七个完好无损的Lifecycle。那么对于中断管理(比方电话来了),则是onPause
-> onStop,恢复生机时onStart ->
onResume;借使当前应用程序的是二个Theme为Translucent(半晶莹剔透)
大概Dialog 的Activity那么中断便是onPause ,恢复生机的时候onResume。

  那么对于”Other app need
memory”,正是大家手提式有线电话机在运维二个应用程序的时候,有极大大概打进去电话发进来短信,或然未有电了,这个时候程序都会被中止,优先去服务电话的基本成效,别的系统也不容许你占用太多财富,最少要保管一些职能(举个例子电话),所以能源缺少的时候也就有超级大概率被kill掉。

办法在系统中的成效及我们相应做哪些:

  onCreate:在这里边创办分界面,做一些数量的开首化专门的学问;

  onStart: 到这一步产生“顾客可知不可相互”的景观;

  onResume:产生和客商可交互的,(在Activity栈系统经过栈的情势管理那一个Activity,即这段日子Activity在栈的最上边,运营完弹出栈,则赶回上贰个Activity);

  onPause:到这一步是可以预知但不足相互的,系统会结束动画等消耗CPU的事体。从上文的叙说已经知道,应该在这里地保留你的生机勃勃对数码,因为这时你的顺序的事先级裁减,有一点都不小希望被系统注销。在这保留的数额,应该在onResume里读出来。

  onStop:变得不可知 ,被下贰个activity覆盖了

  onDestroy:那是Activity被kill前最终二个被调用方法了,或者是别的类调用finish方法大概是系统为了省去空间将它一时半刻的干掉,能够用isFinishing()来推断它,倘诺您有
二个Progress
Dialog在线程中运维,请在onDestroy里把她cancel掉,不然等线程截止的时候,调用Dialog的cancel方法会抛格外。

onPause,onstop,onDestroy,二种情况下 activity都有希望被系统kill 掉。

三、Activity之间的通讯

  在 Android 中,差异的 Activity
实例大概运转在三个进度中,也大概运转在分化的历程中。因而大家必要风流倜傥种特地的机制支持大家在
Activity 之间传递新闻。Android 中通过 Intent 对象来代表一条新闻,叁个Intent 对象不仅仅含有有那么些新闻的目的地,还足以分包音信的剧情,那好比意气风发封
Email,在那之中不止应该包罗收件地点,还足以包蕴具体的剧情。对于二个 Intent
对象,音讯“目标地”是必得的,而内容则是可选项。

  Intent担当对操作的动作、动作涉及多少、附加数据进行描述,Android则基于此Intent的陈说,负担找到相应的零部件,将
Intent传递给调用的机件,并完结组件的调用。因而,Intent在此边起着三个传播媒介中介的功效,专门提供组件互相调用的连带消息,达成调用者与被调用者之间的解耦。

  在选择中,我们能够以三种样式来使用Intent:

  间接Intent:内定了component属性的Intent(调用setComponent(ComponentName)大概setClass(Context,
Class)来钦定)。通过点名具体的组件类,通告应用运营相应的零部件。

  间接Intent:未有一点名comonent属性的Intent。这个Intent须要包蕴丰盛的新闻,那样系统能力依靠那几个消息,在在全数的可用组件中,显明满足此Intent的零部件。
      对于一贯Intent,Android无需去做解析,因为指标组件已经很明显。

  Android供给深入分析的是这一个直接Intent,通过解析,将
Intent映射给可以拍卖此Intent的Activity、IntentReceiver或Service。Intent拆解深入分析机制至关心珍视固然因而查找已注册在AndroidManifest.xml中的所有IntentFilter及中间定义的Intent,最终找到相配的Intent。

四、Activity 的Intent Filter

  Intent Filter 描述了贰个零件愿意选取什么样的 Intent 对象,Android
将其抽象为 android.content.IntentFilter 类。在 Android 的
AndroidManifest.xml 配置文件中得以经过 <intent-filter >节点为一个Activity 钦赐其 Intent Filter,以便告诉系统该 Activity
能够响应什么品种的 Intent。

  当使用 startActivity(intent) 来运行其余壹个 Activity
时,倘诺直接钦定 intent 对象的 Component 属性,那么 Activity Manager
将希图运行其 Component 属性内定的 Activity。否则 Android 将通过 Intent
的别样性质从安装在系统中的全部 Activity
中找找与之最相称的三个运行,若无找到确切的
Activity,应用程序会赢得三个系统抛出的百般。那几个相称的进程如下:

冠亚体育手机网站 2

五、Activity的栈式管理

  Android针对Activity的管住接受的是栈,就是说某三个随即唯有二个Activity处在栈顶,当这几个Activity被销毁后,下边包车型地铁Activity才有希望浮到栈顶,只怕有多个新的Activity被创建出来,则旧的Activity就被压栈沉下去了。Activity是Android程序的显现层。程序的每一个来得显示器就是二个Activity。正在运作的Activity处在栈的最顶部,它是运作情形的。

冠亚体育手机网站 3                    

当在程序中调用 Activity.finish()方法时,结果和客商按下 BACK
键近似:它告诉 Activity Manager该Activity实例能够被“回笼”。随后 Activity
Manager 激活处于栈第二层的 Activity ,把原 Activity 压入到栈的第二层,从
Running 状态转到 Paused 状态。

六、Activity的加载形式

standard、singleTop、singleTask、singleInstance(当中前五个是生机勃勃组、后四个是意气风发组),默以为standard

standard:正是intent将发送给新的实例,所以每一次跳转都会生成新的activity。

singleTop:也是发送新的实例,但差别standard的一些是,在号令的Activity正好位于栈顶时(配置成singleTop的Activity),不会组织新的实例

singleTask:和前面包车型地铁singleInstance都只成立三个实例,当intent到来,须要创制设置为singleTask的Activity的时候,系统会检查栈里面是还是不是早就有该Activity的实例。借使有直接将intent发送给它。

singleInstance

第一表达生机勃勃(Wissu)下task那些概念,Task能够以为是三个栈,可放入多少个Activity。举个例子运行三个行使,那么Android就创设了三个Task,然后运行那些利用的入口Activity,这在它的分界面上调用其余的Activity也只是在此个task里面。那如若在多个task中国共产党享贰个Activity的话如何是好呢。举个例来说,若是翻开三个导游服务类的应用程序,里面有个Activity是展开GOOGLE地图的,当按下home键退回到主菜单又运维GOOGLE地图的利用时,显示的正是刚刚的地图,实际上是同三个Activity,实际上那就引进了singleInstance。singleInstance方式正是将该Activity单独归入三个栈中,这样那个栈中唯有那一个Activity,分化选择的intent都由那几个Activity选取和体现,那样就做到了共享。当然前提是那一个使用都并未有被衰亡,所以刚刚是按下的HOME键,如若按下了重临键,则不行。

七、Activity的跳转

Activity跳转,无再次来到结果
冠亚体育手机网站,  
那是最简单易行的Activity跳转格局。从二个Activity运营另多个Activity,直接startActivity(new
Intent(当前Activity.this, 下生龙活虎Activity.class))。
Activity跳转,重回数据/结果
   必要重回数据或结果的,则选择startActivityForResult (Intent
intent, int
requestCode),requestCode的值是自定义的,用于识别跳转的靶子Activity。跳转的对象Activity所要做的就是再次回到数据/结果,setResult(int
resultCode)只回去结果不带多少,恐怕setResult(int resultCode, Intent
data)两个都回到!而选拔重返的数码/结果的管理函数是onActivityResult(int
requestCode, int resultCode, Intent
data),这里的requestCode正是startActivityForResult的requestCode,resultCode正是setResult里面包车型客车resultCode,再次回到的数量在data里面。
  **
注意,在setResult后,要调用finish()销毁当前的Activity,否则不能够回去到原本的Activity,就不可能实践原本Activity的onActivityResult函数,见到日前的Activity没影响。

八、实例疏解activity切换

android中各类activity常常描述了叁个显示屏上的有所画面(窗口级别的activity除了那几个之外),因而普通手提式有线电话机荧屏七个分界面(精确些说是整个显示器)之间的切换就关系到了activity的切换.
假诺有八个activity,分别是Activity01和Activity02,以往Activity01页面中有三个按键,点下之后会切换成Activity02.並且在Activity切换时,Activity01给Activity02传递了一个参数.
(intent能够在切换Activity时行使,且能传递数据.)

冠亚体育手机网站 4

如何做吧?大概思路为:

    1.在Activity0第11中学安装多个可触及的长空,并加上三个触发器

    2.在Activity01的触发器增多listener

   
3.在listener的接口完成中,设置四个Intent,让那几个Intent能够将Activity01和Activity02绑定起来,并且经过putExtra就要传输的值放到Intent对象中蕴藏

   
3.listener接口完毕最后,通过Activity01运行调用这些Intent对象,通过调用来切换成Activity02

   
4.在Activity0第22中学,使用getIntent来获取上下文切换中使得本人运维了的不得了Intent对象实例

   
5.经过取获得的intent对象实例,使用起getStringExtra来获得先前putExtra的值.

   
当然,后边假设对Intent越发领会时,就须要按实际境况选取更贴切的囤积数据及获取数据的函数了.

以下是促成的现身说法:

冠亚体育手机网站 5冠亚体育手机网站 6

谈起底附上关键部分代码:

Activity01中:

button.setOnClickListener(new Button.OnClickListener() { //更准确点应该是View.OnClickListener
 public void onClick(View v)
 {
  /* 新建一个Intent对象 */
  Intent intent = new Intent();
  intent.putExtra("name","LeiPei"); 
  /* 指定intent要启动的类 */
  intent.setClass(Activity01.this, Activity02.class);
  /* 启动一个新的Activity */
  Activity01.this.startActivity(intent);
  /* 关闭当前的Activity */
  Activity01.this.finish();
 }
});

Activity02中:  

 String name=intent.getStringExtra("name");
 textview2.setText("activity01传过来的值为:"+name);

如上就是小编收拾的关于activity所关联到的知识点,希望对我们的就学抱有利于,还应该有为数不菲漏掉的学识,作者会继续周到补偿的,希望大家不断关切。

您或者感兴趣的稿子:

  • Android编制程序四大组件之Activity用法实例解析
  • 深深解读Android开拓中Activity的生命周期
  • Android编程获取并设置Activity亮度的办法
  • Android编制程序中activity的完好生命周期实例详解
  • Android编制程序中activity运行时现身白屏、黑屏难题的解决方式
  • 轻易易行介绍Android开荒中的Activity控件的基本概念
  • Android达成Activity之间通讯的法子
  • Android编制程序之多样Activity加载形式解析

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注