我是靠谱客的博主 纯情发卡,最近开发中收集的这篇文章主要介绍Android四大组件——Acvitity.txt,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


1——概述:

1、Activity 是用户接口程序,原则上它会提供给用户一个交互式的接口功能。
2、Activity本身没有没有页面, Activity类创建了一个窗口,通过setContentView(View)
3、接口把UI放到activity创建的窗口上实现图形化。
4、Activity之间通过Intent通信
5、Android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,
    否则系统将不识别也不执行该Activity(目前系统会自动注册)
==================================================================================================================  

2——生命周期的解释:

onCreate    实例化 当Activity第一次启动的时候,触发该方法,完成初始化。
onStart     启动  该方法的触发表示所属Activity将被展现给用户。
onResume    交互  当一个Activity和用户发生交互的时候,触发该方法
onPause     挂起  当一个正在前台运行的Activity因为其他的Activity需要前台运行而转入后台运行的时候,触发该方法。
onStop      停止  一个活动不再需要展示给用户的时候,触发该方法。如果系统内存紧张,则会直接结束这个Activity,而不会触发 onStop 方法。所以如果有要保存的数据时,应该在onPause时做,可以认为onPause方法或许是活动触发的最后的方法,之后就无法主观控制了。
onRestart   重启  当处于停止状态的Activity需要再次展现给用户的时候,触发该方法。
onDestroy   销毁  当Activity销毁的时候,触发该方法。和 onStop 方法一样,如果内存紧张,系统会直接结束这个Activity而不会触发该方法。

==================================================================================================================

3——Acvitity的四种状态

1、Active/Runing(活动的):一个新的Activity入栈后,它在屏幕最前端,处于栈的最顶端,
处于可见并且可交互的激活状态。
onCreate()、onStart() 、onResume() 函数调用的Activity都会变成foreground process(前景模式)正在运行的Activity。

2、Paused(暂停):当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。此
时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经
失去了焦点故不可与用户交互。
在Activity窗口画面变为透明时,就会由onPause()函数掌控进入暂停状态。

3、toped(停止):当 Activity 被另外一个 Activity 覆盖、失去焦点并不可见时的状态。
在Activity窗口画面被其他Activity完全盖掉,窗口画面已经完全看不见时,则会进入onStop()停止状态。
停止后的两种结果:一是直接被onDestroy()退出,该程序将完全关闭,无法再使用任何返回键回到该程序;
另一个处理方式是当其他Activity需要内存时,这个background process会先被清除掉,释放出内存。

4、Killed(待用):Activity 被系统杀死回收或者没有被启动时的状态。
直接被onDestroy()退出,该程序将完全关闭,无法再使用任何返回键回到该程序;

==================================================================================================================

4——Acvitity的跳转:

一、无返回值的跳转:
            A启动B,无返回结果
              使用startActivity(new Intent(当前Activity.this, 下一Activity.class))
    代码样例:
       Intent intent=new Intent(MainActivity.this,SecActivity.class);

二、带返回值的跳转:
    A启动B,B再返回A,由A接收B返回的结果
    第一个Activity使用:startActivityForResult (Intent intent, int requestCode)跳转
    (requestCode的值是自定义的,用于识别跳转的目标Activity)。
    第二个Activity使用:setResult(int resultCode)或
    setResult(int resultCode, Intent data)返回数据/结果。
    第一个Activity使用:onActivityResult(int requestCode, int resultCode, Intent data)
    接收返回的数据/结果
    (requestCode就是startActivityForResult的requestCode,resultCode就是setResult里面的resultCode,返回的数据在data里面)。
注意,
    在setResult后,要调用finish()销毁当前的Activity,
    否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数,看到当前的Activity没反应。

    代码样例1:主页面的值带给子页面显示

                intent.putExtra("content",content);
                intent.putExtra("bean",phone);
                startActivity(intent);

    代码样例2:主页面接受子页面的参数值:
      MainAcvitity:

      public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,SecActivity.class);
                startActivityForResult(intent,request_nickname);


    /**
     * 重写onAcvitityRusult()方法
     * @param requestCode 请求码
     * @param resultCode    结果码
     * @param data 传过来的数据
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        //首先判断请求码 然后判断结果码
        if(requestCode!=request_nickname){//说明是设置的不是昵称
            return;
        }
        if(resultCode==RESULT_OK){//说明用户输入了
            btn_press.setText(data.getStringExtra("text"));
        }else if(resultCode==RESULT_CANCELED){
            Toast.makeText(MainActivity.this,"用户取消",Toast.LENGTH_SHORT).show();
        }
        super.onActivityResult(requestCode, resultCode, data);

  SecAcvitity:

        et_text= (EditText) findViewById(R.id.et_text);
        btn_desgin= (Button) findViewById(R.id.btn_desgin);
        btn_desgin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name=et_text.getText().toString();
                if(TextUtils.isEmpty(name)){//用户没有输入,结果码是取消
                        setResult(RESULT_CANCELED);
                }else {//如果输入不为空,执行带值跳转
                    Intent intent=new Intent();
                    intent.putExtra("text",name);
                    setResult(RESULT_OK,intent);
                }
                SecActivity.this.finish();//结束当前页面,返回要跳转的页面AcvitityMain


==================================================================================================================

5——Acvitity中Intent的常用方法:

public void startActivity(Intent intent)    
    启动一个Activity,并通过Intent传送数据

public void startActivityForResult(Intent intent, int requestCode)  
    启动并接收另一个Activity程序回传数据,当requestCode大于0才可以触发onActivityResult()

public Intent getIntent()   
    返回启动当前Activity程序的Intent

protected void onActivityResult(int requestCode, int resultCode, Intent data)   
    当需要接收Intent回传数据的时候覆写此方法对回传操作进行处理

public void finish()    
    调用此方法会返回之前的Activity程序,并自动调用onActivityResult()方法

public final Cursor managedQuery (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 
    处理返回的Cursor结果集

==================================================================================================================

6——Acvitity的栈式管理和四种启动模式:
Acvitity的栈式管理:
    Android针对Activity的管理使用的是栈,就是说某一个时刻只有一个Activity处在栈顶,
    当这个Activity被销毁后,下面的Activity才有可能浮到栈顶,
    或者有一个新的Activity被创建出来,则旧的Activity就被压栈沉下去了。(像水杯一样现金后出)
    Activity是Android程序的表现层。程序的每一个显示屏幕就是一个Activity。
    正在运行的Activity处在栈的最顶端(唯一可直接操作的Acvitity),它是运行状态的。


配置信息声明启动方式:
AndroidMainifast.xml
          <activity
            android:name=".StandardActivity"
            android:launchMode="standard" />
        <activity
            android:name=".SingletopActivity"
            android:launchMode="singleTop" />
        <activity
            android:name=".SingleTaskActivity"
            android:launchMode="singleTask">
        <activity android:name=".SingleInstanceActivity"
            android:launchMode="singleInstance"></activity>
    1.standardActivity
       默认的启动模式,每次激活Activity时(startActivity),都创建新的Activity实例,
       并放入任务栈(每次启动的Acvitity内存地址都不一样,自己可以向自己发出跳转命令,刷新自己在内存中的地址,之前的地址还会在,按返回键可查)
    2.singleTop:如果任务栈栈顶就是该Activity,则不需要创建(此时自己是无法像自己进行跳转的,内存地址不会改变),
        其余情况都要创建Activity实例
        如果从栈顶返回到MainAcvitity再次进入时,内存地址就会发生改变
    3.Singletask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此
       Activity放入栈顶,并把该Activity以上的Activity实例都清除,只会保留第一次跳转的内存地址
    4.singleInstance:// 另起一个任务栈,(唯一一种新建栈地址的启动方式)只存放该activity的实例,启动时界面效果与上边不同,
    必须返回MainAcvitity中重新启动(相当于刷新,每次跳转内存地址不同,只保留最后一次启动的地址),
    启动后自己不能向自己发出跳转命名
    通过 tv_task.setText(" 栈地址:"+getTaskId()+"" + "n 内存地址:"+this.toString());可以验证

最后

以上就是纯情发卡为你收集整理的Android四大组件——Acvitity.txt的全部内容,希望文章能够帮你解决Android四大组件——Acvitity.txt所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部