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)的配置,只要某个Activity(或BroadcaseReceiver)的配置中包含了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声明


        
            
            
            
            
            

            
        
    

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);

你可能感兴趣的:(Android基础简单回顾)