Android基础简单回顾

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

onResume执行时Activity显示

数据存储

1

|存储方式|数据特点|数据量|文件类型|储存位置||
-------------------------------------------------------------|
|SharedPreferences|boolean,int,float,long和String五种简单的数据类型|无限制|基于XML文件存储的“key-value”键值对数据|在data/data/程序包名/shared_prefs目录下|
|文件存储 | |无限制|任意文件|在设备本身的存储设备或者外接的存储设备中,自己指定目录|
|Sqlite数据库 |适用复杂的关系型数据|无限制|数据库文件|在/data/data/程序包名/databases目录下|
|ContentProvider |允许其他应用访问或修改|无限制|常见: 音频,视频,图片和通讯录|本质也是数据库|

2

内部储存:data文件夹就是内部存储

  • data/data/包名/shared_prefs
  • data/data/包名/databases
  • data/data/包名/files
  • data/data/包名/cache

内部存储的访问可以通过:

  1. getFileDir():用来存储app内部数据,当内部存储紧张时不会被自动删除
  2. getCacheDir():用户存储App内部的缓存数据,当内部存储紧张时回被系统自动的删除
  3. openFileOutput():对getFileDir的封装。返回outputstream流

外部储存:storage文件夹,也有可能是mnt文件夹

  1. 在manifest添加android.permission.WRITE_EXTERNAL_STORAGE权限
  2. 外部存储的访问前首先要判读是否可用:getExternalStorageState()==Enviroment.MEDIA_MOUNTED时表示已经挂载成功可以使用
  3. 若需要在app被卸载时数据随同删除可以通过getexternFileDir。
  4. 若需要保留则使用getExternalStoragePublicDirectory()

Intent

Intent代表了Android应用的启动"意图",Android应用将会根据Intent来启动指定组件,至于到底启动哪个组件,则取决于Intent的各属性.

1. Intent的Component属性

1. 通过Intent的Component属性设置启动组件,需要接受一个ComponentName对象.Component对象包含一些构造器
    1. ComponentName(String pkg,String cls):创建pkg所在包下的cls类所对应的组件
    2. ComponentName(Context pkg,String cls):创建pkg所对应的包下的cls类所对应的组件
    3. ComponentName(Context pkg,Class<?> cls):创建pkg所对应的包下的cls类所对应的组件
2. 通过其他方法设置Component
    1. setClass(Context packageContext,Class<?> cls):设置该Intent将要启动的组件对应的类
    2. setClassName(Context packageName,String className):设置该Intent将要启动的组件对应的类名
    3. setClassName(String packageName,String className):设置该Intent将要启动的组件对应的类名

在Android里Context对象和该应用的包名有一一对应的关系,因此上面三个setClass方法,都是指定组件的包名,然后指定启动的组件

  • 指定了Component属性的Intent称为显式Intent

      //启动显式Intent
      ComponentName componentName = new ComponentName(MainActivity.this, TestActivity.class);
      Intent intent = new Intent();
      intent.setComponent(componentName);
      startActivity(intent);
      
      //通常情况下,使用这种简化的写法
      (Intent提供的这个简化的构造器)
      Intent intent = new Intent(MainActivity.this, TestActivity.class);
      startActivity(intent);
    

2 Intent的Action,Category属性

Action、Category属性的值都是普通的字符串

Action代表该Intent所要完成的一个抽象动作,而Category则用于为Action增加额外的附加类信息

Action要完成的只是一个抽象的动作,这个动作具体由哪个组件Activity(或BroadcaseReceiver)来完成,Action这个字符串本身不管用

启动哪个Activity或BroadcaseReceiver,取决于Activity(或BroadcaseReceiver)的<intent-filter.../>配置,只要某个Activity(或BroadcaseReceiver)的<intent-filter.../>配置中包含了Intent携带的Action字符串,该Activity(或BroadcaseReceiver)就可能被启动.

Intent通过指定Action属性,就可以把该Intent与具体的Activity分离。

每个Intent只能指定一个Action,但是一个Intent又想有多余的要求,就需要用到Category属性

Intent在配置时可以携带一个Action和多个Category,同时每个组件(Activity,Service,BroadcastReceiver)可以声明自己满足多个Action要求,多个Category要求。
只要某个组件能满足的要求大于、等于Intent携带的要求,那么该Intent就能启动该组件

2. Data、Type属性与intent-filter配置

  • Data属性通常向Action属性提供操作的数据,Data属性接受一个Uri对象
  • Type属性用于指定该Data属性所制定的Uri对应的MIME类型(设定某种扩展名的文件用一种应用程序来打开的方式类型),这种MIME类型可以是任意的abc/xyz格式的字符串

如果为Intent先设置Data属性,后设置Type属性,Type属性将会覆盖Data属性

如果为Intent先设置Type属性,后设置Data属性,Data属性将会覆盖Type属性

如果想Intent既有Data又有Type,可以调用Intent的setDataAndType()方法

AndroidManifest声明

<activity android:name=".TestActivity">
        <intent-filter>
            <!--需要Intent的Action为"xxx",Category为"xxx_category"-->
            <action android:name="xxx" />
            <category android:name="xxx_category" />
            <!--需要Intent的Data属性scheme为"xxx",
            且host为"xxx",
            post为111,
            path为"myPath",
            type为"abc/xyz",才能启动该Activity
            -->
            <data
                android:host="xxx"
                android:mimeType="abc/xyz"
                android:path="/myPath"
                android:port="111"
                android:scheme="xxx">

            </data>
        </intent-filter>
    </activity>

3. Intent的Extra属性

Intent的Extra属性用于多个Activity之间传递数据

  • 可以通过Intent的putExtra方法传递基本数据类型和可序列化的对象
  • 可以通过Intent的putExtras方法传递将数据打包的Bundle对象
    public Intent putExtra(String name, String,Int,boolen,Char等 value);    
    //
        Intent intent = new Intent(MainActivity.this, TestActivity.class);
        String name = "jack";
        int age = 20;
        intent.putExtra("name", name);
        intent.putExtra("age", age);
        startActivity(intent);

    public Intent putExtras(Bundle extras);
    //
        String name = "jack";
        int age = 20;
        Bundle bundle = new Bundle();
        bundle.putString("name", name);
        bundle.putInt("age", age);
        Intent intent = new Intent(MainActivity.this, TestActivity.class);
        intent.putExtras(bundle);
        startActivity(intent);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,432评论 0 17
  • 一、生命周期 上图是 Activity 和 Fragment 的完整的生命周期函数调用过程,Activity 常规...
    秀花123阅读 1,292评论 4 25
  • 感赏今天在对小宝情绪差点失控的时候,及时转念,开始冷静地思考转念。一次是在保姆没看好小宝,他不小心耳朵撞在冰箱门上...
    玥儿_2017阅读 212评论 0 0
  • 如果有两件事,不知道该选择哪一个,那么就去选择更为困难的那个,一般来说,不会有错。
    李灿辉阅读 92评论 0 0
  • 你一定会幸福的,因为你从来不把希望寄托在别人身上。
    天堂的一侧阅读 98评论 0 0