【Android】初识Activity(一)

作者: 紫豪 | 来源:发表于2016-07-06 16:35 被阅读363次

    1. 什么是Activity

    • Activity是一个应用程序组件,它的主要功能是提供界面,用户可以用来交互为了完成某项任务,例如用户登录、拍照、拨号、聊天等。
    • 一个应用程序可能由一个多个Activity组成,这些Activity怎么显示,需要多少个Activity,完全依赖于应用的设计者。
    • 一个应用程序必须指定一个Activity作为主Activity,它是程序启动时首先显示的界面。
    • 每个Activity默认的被给予一个窗口来绘制,一般的,这个窗口占满整个屏幕,但是他可以比屏幕小并且浮在另一个窗口的上面。
    • 当一个Activity因为新的Activity启动而被停止时,它会收到状态变化的通知,这样的变化有多个,每个都会引起系统调用一个相应的回调方法以通知Activity,这些回调方法被统称为“生命周期回调方法”。这些回调方法分别在Activity被创建、停止、恢复、销毁时被调用。

    2. Activity的使用

    • 2.1 如何设置主Activity
      在项目的AndroidManifest.xml文件中,声明对应的Activity,同时在activity标签内添加以下代码:
    <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    

    整体示例如下:

    <activity
          android:name=".MainActivity"
          android:label="@string/app_name" >
          <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
    </activity>
    
    • 2.2 如何启动其它的Activity
      那么,我们如何在一个Activity中启动另外一个Activity呢?这里就需要我们使用另外一个重要的组件Intent(关于Intent组件在这里就不做过多的赘述了)。
      示例如下(在ManinActivity启动LoginActivity--即跳转到LoginActivity界面):
        Intent intent = new Intent();// 新建一个Intent对象
        intent.setClass(MainActivity.this, LoginActivity.class);// 设置Intent目标
        startActivity(intent);// 执行跳转(启动LoginActivity)
    
    • 2.3 Activity常用的数据传递方式
      • 1.Intent
        传递(value可以为其它数据类型,key必须为String类型):
            Intent intent = new Intent();// 新建一个Intent对象
            intent.setClass(MainActivity.this, LoginActivity.class);// 设置Intent目标
            intent.putExtra("key", "value");// 设置要传递内容的key与value
            startActivity(intent);// 执行跳转(启动LoginActivity)
    

    获取(在目标Activity使用一下代码获取传递的值):

    getIntent().getStringExtra("key");// 获取执行传递动作的Intent根据key获取对应的value值
    
     - 2.SharedPreference
     存:
    
            SharedPreferences sp = getSharedPreferences("test", 0);// test->存储文件名
            SharedPreferences.Editor edit = sp.edit();
            edit.putString("username", "admin");
            edit.putString("password", "123456");
            edit.commit();
    
     取:
    
            SharedPreferences ps = getSharedPreferences("test", 0);// test是存储文件
            String userName = ps.getString("username", "defaultName");
            String passWord = ps.getString("password", "defaultPw");
    
     > SharedPreference存储步骤:
        1.根据Context获取SharedPreferences对象;
        2.利用edit()方法获取Editor对象;
        3.通过Editor对象存储key-value键值对数据;
        4.通过Editor对象存储key-value键值对数据。
     - 3.SQLite
     关于SQLite内容过多,推荐参阅 [ANDROID开发之SQLite详解](http://blog.csdn.net/harvic880925/article/details/24516545)。
    

    注:Intent/ShraedPreference适合较简单的数据传输,一般用于传输一些简单的参数或配置信息。较大数据量的传输,一般使用SQLite的方式实现。


    3. Activity的启动模式#

    • 3.1 standard 默认的启动模式,每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;
    • 3.2 singleTop 如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例;
    • 3.3 singleTask 如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都出栈;
    • 3.4 singleInstance 如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例。

    启动模式:启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置.
    任务栈:每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序.


    4. Activity的生命周期

    Activity生命周期.png
    1. 启动Activity:先调用onCreate(),然后调用onStart(),最后调用onResume(),Activity进入运行状态;
    2. 当前Activity被覆盖或锁屏:先调用onPause(),然后暂停当前Activity的执行状态;
    3. 解除Activity覆盖或解锁时:先调用onResume(),然后再次进入运行状态;
    4. 跳转到新的Activity界面或按Home键回到主屏:应用进入后台,系统会先调用onPause(),然后调用onStop(),转入停滞状态;
    5. 返回到该Activity:先调用onRestart(),然后调用onStart(),最后调用onResume(),重新进入到运行状态;
    6. 在第1.2/1.4步骤情况下,当前Activity被系统kill,用户操作退回到当前Activity:调用onCreate()->onStart()->onResume(),进入运行状态;
    7. 用户退出当前Activity:先调用onPause(),然后调用onStop(),最后调用onDestory(),结束当前Activity的运行状态.

    相关文章

      网友评论

        本文标题:【Android】初识Activity(一)

        本文链接:https://www.haomeiwen.com/subject/ixmkjttx.html