Activity详解—— Activity基本用法

Activity的xml配置

Activity在使用时候必须在xml中设置,否则在启动Activity时候会找不到当前的类。下面配置是常用的作为程序入口的Activity配置。如下设置后,点击应用启动图标,第一个启动的就是当前Activity。

        <activity
            android:name=".MainActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:screenOrientation="portrait"
            android:theme="@style/horizontal_slide">
            <!--intent消息过滤用来,此处标记用来接收系统的启动请求-->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
启动一个Activity

一般情款下,Activity使用intent启动,启动方法如下:

Intent intent = new Intent(MyActivity.this, MyOtherActivity.class);
startActivity(intent);

除此以外,Activity还有隐式启动的方式:

隐式Intent是一种让匿名应用程序组件服务动作请求的机制。创建一个新的隐式Intent时,你要指定要执行的动作,以及这个动作所需要的数据。然后手机上能够执行此动作的应用回来响应这个动作。

当你使用这个新的隐式Intent来启动Activity时,Android会在运行时解析它,找到最适合在指定的数据类型上执行动作的类。这意味着,你可以创建使用其它应用程序的工程,而不需要提前精确地知道你会借用哪个应用程序的功能。

//Activity会在运行时候解析,调用所有能够执行这个动作的程序。这里启动的是一个打电话程序
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(“tel:555-2368”));
startActivity(intent);
Activity简单生命周期

Activity的常用生命周期包括以下几个:

  • onCreate():Activity创建时候调用。生命周期第一个方法,一般做一些初始化操作。
  • onStart():表示Activity正在启动,当前Activity处于可见状态,但还不可交互(编辑)。
  • onResume():表示Activity已经可以编辑,Activity处于可交互状态。
  • onRestart():一个未被销毁的Activity重新显示出来时候回回调这个方法。一般是调用顺序会是:onRestart()->onStart()->onResume()
  • onPause():当Activity市区焦点(不可编辑)时调用,一般情况下onStop方法会紧接着被回调。
  • onStop():一般在onPause方法执行完成直接执行,表示Activity即将停止或者完全被覆盖(Stopped形态),此时Activity不可见,仅在后台运行
  • onDestory():Activity正在被销毁,也是生命周期的最后一个方法。
  • onNewInstent():非默认模式时,启动一个已存在的Activity时候,会先调用这个方法。需要在此方法中更新intent,否则getIntent()会一直获取旧的intent。
Activity的启动方式

在一下基础的android岗位中,android中有哪些常见的启动方式,是面试的常见问题之一。现在我总结下:

android有如下四种启动方式,他们所对应的状态如下:

  • singleTop

    如果一个Activity已经存在,并且处于任务栈的栈顶。那么再启动这个Activity时不会创建新的实例,而是直接调用当前Activity的onNewIntent()方法,启动。

    具体的生命周期是onNewIntent()->onResume()

  • singleTask

    栈内唯一的启动方式。如果任务栈中已经存在当前Activity,那么直接启动当前Activity,不创建新的实例。同事在当前Activity栈之上的Activity会被移除。可以用来设置主页面。每次返回首页时候,结束所有Activity。

    具体生命周期调用是onNewIntent()->onRestart()->onStart()->onResume()

  • singleInstance

    在一个新的栈中打开一个Activity。可以用来共享Activity。如在一个应用中创建了一个Activity,然后在另一个应用中页可以再以这个模式建立这个Activity时,不会重复创建。

    具体生命周期调用是onNewIntent()->onRestart()->onStart()->onResume()

  • standard(默认)

    默认的模式,每次新建Activity时候都会在栈中加入一个Activity。

    具体生命周期调用是onCreate()->onStart()->onResume()

Activity之间值传递
  • 启动Activity时通过intent传值。

    启动Activity时候传值:

    Intent intent = new Intent(context,OtherActivity.class);
    intent.putExtra("key","value");
    context.startActivity(intent);
    

    在OtherActivity中获取所传值:

    String value = getIntent().getStringExtra("key");
    
  • 在Activity的onActivityResult()方法中获取回传的值。

    通过startActivityForResult()方法启动Activity

    //此处设置的请求码为111
    startActivityForResult(new Intent(context,OtherActivity.class),111);
    

    在当前Activity重写onActivityResult()方法获取回传值:

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            //如果请求码相符,且返回值为正确值,则取值
            if (requestCode == 111 && resultCode == Activity.RESULT_OK) {
                data.getStringExtra("key");
            }
        }
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容