android核心组件Activity的跳转

来源:互联网 发布:新网域名续费价格 编辑:程序博客网 时间:2024/05/15 06:27
 Activity简介
       Activity是android应用程序的界面。
每个应用程序往往都存在多个Activity,即存在多个界面,各个界面之间根据一定的逻辑规则互换显示。
Activity的本质是一个java类,在一般情况下,可认为每个界面均是一个Activity,
  也就是说Activity的数量与界面的数量是一一对应的。


 Activity通常用于处理UI相关的操作,例如UI控件的加载、配置及响应等等。
 
从理论上说,在Activity中可以完成所有任务的处理,包括下载文件等,但并不是最合适的做法


界面的组成: Activity是用于处理界面的java类,即处理界面相关的程序,而界面外观的设计往往通过使用xml
进行配置,这些xml文件称之为“布局文件”,存放于项目的res文件夹下的layout系类文件夹中。


布局文件的加载:使用eclipse创建Activity时默认会重写Activity中的onCreate()方法,并在该方法中调用setContentView()方法
设置需要显示到界面的布局,实现界面的显示。
开发人员也可以通过程序创建需要显示的界面,但使用代码创建界面中各个控件的实现成本较高,一般不推荐。
在创建Activity项目时,开发工具默认会创建一个MainActivity,开发人员可以根据需求创建若干个Activity。


配置入口的Activity:
   尽管任何一个android应用程序中都可以有若干个Activity,但一定仅有一个Activity作为入口Activity,
   即新打开应用程序时,显示的第一个Activity。

   在项目的根目录下,androidMainfest.xml文件中即配置了入口Activity。

<intent-fliter>      <action android:name="android.intent.action.MAIN"/>      <category android:name="android.intent.category.LAUNCHER"/>      </intent-filter>

 在AndroidMainfest.xml文件中,可以为每个Activity都添加入口的配置代码,但在程序运行之前,系统会对Androidmainfest.xml文件从上至下解析,
     当解析到第一个匹配项时即终止,也就是说第1个存在入口配置的Activity将被启动。


     综上所述,当尝试启动一个Android应用程序时:
       1 系统将解析该应用程序的AndroidMainfest.xml文件,尝试检索到入口Activity;
2 运行入口Activity的程序,即Activity的java类,并自动调用onCreate()方法,在
onCreate()方法执行的过程中,setContentView()方法将被调用,则setContentView()
参数对应的布局被加载,完成界面的初始化。
Androidmainfest.xml与系统组件
      在Android中存在4个系统组件,分别是:Activity、Service(服务)、ContentProvider(内容提供者),
      BroadcastReceiver(广播接收着),这些系统组件将由Android系统对他们进行管理和维护,开发人员不需要,也无权维护,但他们必须在AndroidMainfest.xml文件中的
      <application>节点下进行配置,通常称之为注册。
  直接启动Activity
         激活Activity
    Activity作为Android中的系统组件,其实例的创建、销毁过程都是由系统完成的。
    每次Activity北显示,都有可能是“创建实例->显示”或者是“实例已存在,直接显示”
      的过程,启动Activity,也被称之为激活Activity。
    
    在Android中,激活系统组件需要使用Intent对象。
    Intent(意图)在Android系统中主要用于:
     激活系统组件;
     在组件之间传递数据。
 使用Intent激活Activity的步骤:
   1 创建Intent对象,并通过构造方法Intent(Context packageContext,class<?>cls)设置需要激活的Activity;
   2  调用startActivity(Intent intent)方法。


   Intent intent = new Intent(this,SecondActivity.class);
   startActivity(intent);
启动带返回值的Activity
     在一些应用场景中,需要在启动一个Activity并完成相关的业务之后,向他的启动源(
     启动这个Activity的前一个Activity)返回一些信息,典型的例如验证用户操作。


     在启动源中,需要调用startActivityForResult()方法激活新的Activity;
     public void startActivityForResult(Intent intent,int requestCode)


     当被启动的Activity返回结果时,启动源的onActivityResult()方法会被回调。


     protected void onActivityResult(int requestCode ,int resultCode,Intent data)


     在被启动的Activity中添加返回数据
        在被启动的Activity中,开发人员应该将数据添加(封装)到Intent对象中,并调用setResult()方法。


public void setResult(int reslutCode,Intent data)


当被启动的Activity结束时,启动源中的onActivityResult()方法会被回调,结束Activity可调用finish()方法。


public void finish()


代码   protected static final int REQUEST_CODE = 998;    Intent intent = new Intent(getApplicationContext(),LoginActivity.class);    startActivityForResult(intent,REQUEST_CODE);    protected void onActivityResult(int requestCode,int resultCode,Intent data){        if(requestCode == REQUEST_CODE && resultCode == RESULT_OK){    String user = data.getStringExtra("username");    TextView userTextView =(TextView)findViewById(R.id.login_user);    userTextView.setText(user);    userTextView.setVisibility(View.VISIBLE);    mLoginButton.setVisibility(View.GONE);}    }    EditText userEditText = (EditText)findViewById(R.id.edit);    String user = userrEditText.getText().toString();    Intent intent = new Intent();    intent.putExtra("username",user);    setResult(RESULT_OK,intent);    finish();

 关闭Activity
   当开发人员确定Activity已经不再需要再次使用时,可以调用finish()方法结束当前Activity;
   当调用finish()方法时,Activity的onDestroy()方法会被回调,开发人员可以重写该方法,
      并在该方法中实现释放资源的相关代码。


      protected void onDestroy()
        
      当Activity被关闭时,如果它是通过startActivityForResult()方法激活的,则启动源(激活塔德Activity )
      的onActivityResult()方法将被回调。


      开发人员也可以调用finishActivity()方法关闭Activity。
      public void finishActivity(int requestCode)


      该方法并不用于关闭自身,而是关闭通过startActivityForResult()激活的Activity,由于startActivityForResult()激活的Activity可能有多个,所以能被该方法关闭的Activity也可以有多个,finishActivity()的参数即为调用startActivityForResult()时的参数
      requestCode.


      如果requestCode可以匹配多个Activity,则这些Activity将全部被关闭。


      定义一个应用程序级别的全局变量,使用集合类型记录下每个启动过的Activity,当需要全部关闭时,遍历该集合逐一关闭即可。

0 0
原创粉丝点击