Android进阶知识点(再话Activity)

来源:互联网 发布:英语词典哪个好 知乎 编辑:程序博客网 时间:2024/06/06 08:34

再话Activity

创建新的ActivityNew->Activity->Empty Activity

应用的所有activity都必须在manifest文件中声明,这样操作系统才能够使用它们。

启动Activity:一个Activity启动另一个Activity的最简单的方法是使用startActivity方法。调用请求实际发给了操作系统的ActivityManagerActivityManager负责创建Activity实例并调用其onCreate()方法。

Intent对象是component用来与操作系统通信的一种媒介工具。


Activity是一种component,还包括:servicebroadcast receiver以及content provider

Intent是一种多用途的工具,提供了多个构造方法。

 

显示Intent

 

一个应用的activity如需启动另一个应用的activity,可以通过创建隐式Intent来处理。

父活动传递信息给子活动:

 

子:使用intent extra

public staticIntent newIntent(ContextpackageContext,booleananswerIsTrue){
    Intent i=newIntent(packageContext,CheatActivity.class);
    i.putExtra(EXTRA_ANSWER_IS_TRUE,answerIsTrue);//设置extra的值
    returni;
}

②获取extra的信息:

mAnswerIsTrue=getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE,false);

 

父:启动子activity

Intent i=CheatActivity.newIntent(QuizActivity.this,answerIsTrue);
startActivity(i);

 

子活动传递信息给父活动:

父:

 

请求代码:是先发给子activity,然后再返回给父activity的用户定义整数值。当一个activity启动多个不同类型的子activity,且需要判断区分消息回馈方时,通常会用到该请求码。

子:设置返回结果,返还intent,解析结果intent

setResult(RESULT_OK,data);

父:处理返回结果

@Override
protected void onActivityResult(intrequestCode,intresultCode,Intentdata) {
    if(resultCode!=Activity.RESULT_OK){
        return;
    }
    if(requestCode==RESULT_CODE_CHEAT){
        if(data==null){
            return;
        }
        mIsCheater=CheatActivity.wasAnswerShown(data);
    }
}

GeoQuiz内部交互时序图:


 

ActivityManager维护着一个非特定应用独享的回退栈。所有应用的activity都共享该回退栈。

 

1 0