android开发之Activity详解

来源:互联网 发布:unsw moodle 网络 编辑:程序博客网 时间:2024/06/05 08:16

(一)Activity的简介:

                 Activity意为活动,他是最容易吸引到用户的地方。主要用于与用户进行交互。一个应用程序一般有多个活动,他们之间彼此保持着弱的绑定状态。每个程序都有一个主界面,当应用启动后,呈现给用户。为了能呈现给用户精彩的体验。每一个Activity都可以启动另外一个Activity.新启动的Activity就被放到栈顶,之前的Activity就被停止或者销毁,系统一般把停止的Activity压入一个栈。栈遵循后进先出的机制。

Activity有三大状态:

(运行,停止,销毁)

运行状态:Activity位于前台,用户可见,可以得到焦点并进行交互。

停止状态:可见或者不可见,Activity失去焦点。

销毁状态:Activity的进程结束。

七大方法:

onCreate()创建时回掉该方法

onStart()启动时回掉该方法

onRestart()重新启动Activity调用该方法

onResume()恢复Activity时调用。一般在onStart方法后调用

onPause()暂停Activity被调用

onStop()停止Activity调用

onDestroy())销毁Activity调用,且只被调用一次。

外加四种启动模式:

加载模式的出现是因为Android采用Task来管理多个Activity,当我们启动一个Activity,Android会先创建一个Task,然后去启动这个Task的入口(即过滤器中配置的MAIN和LAUNCHER),加载布局界面。

standard:(标准模式) 每次Android为Activity创建一个新的实例,并将Activity添加到当前的栈中,这种模式不会启动新的Task,新的Activity会被加入原有的栈中。

 singleTop  与标准模式相似,但是如果要启动的Activity已经位于栈顶,Android不会重新创建Activity的实例,直接用。如果要启动的Activity不位于栈顶,系统会重新创建Activity,与标准模式一样。

singTask在同一个Task只能有一个实例。如果Acivity实例不存在,则创建实例并加载到栈顶。如果存在一个实例,此时与singleTop一样。如果存在多个实例,则系统会把要启动的Activity上面的实例移出栈中,使要加载的Activity位于栈顶。

 singleInstance无论从那个Task启动目标Activity,只会创建一个Activity实例,并使用一个全新的Task栈来加载实例。


(二)创建一个Activity:

       必需实现onCreate方法在Activity创建时被调用,该方法只被调用一次。在实现该方法的同时,必须调用setContentView()来指定用户布局界面Layout.Layout是一组继承了View或者ViewGroup的布局。当然你也可以自己去定义布局或者组件,然后继承他们。

定义布局最常用的还是XML,我建议能使用XML的地方,尽量使用XML,因为这种方式可以提高你的代码可维护性。保证你的业务逻辑与用户交界面分开。你可以在XML中可视化设置你精彩布局,然后通过setContentView()传递布局文件的ID来让java代码与XML绑定。XML中的组件都可以通过ID绑定到java代码中。

在AndroidManifest(文件清单)注册:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
//通过package指定了程序的包名    package="com.example.wc.android_1">    <application        android:allowBackup="true"
//设置图标        android:icon="@mipmap/ic_launcher"
//指定活动中标题栏的内容        android:label="@string/app_name"        android:roundIcon="@mipmap/ic_launcher_round"        android:supportsRtl="true"
//风格        android:theme="@style/AppTheme">        <activity android:name=".MainActivity">
//过滤器            <intent-filter>
//指定主界面入口                <action android:name="android.intent.action.MAIN" />//让系统启动                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>
上面是一个文件注册,活动的注册声明要放在</application> 标签中,这里是用<activity/>标签来对活动进行注册的。使用android:name来指明具体注册哪一个活动,上面的.MainActivity其实就是com.example.wc.android_1.MainActivity的缩写。一旦你发布了应用,就不能改变名字。
(三)启动一个Activity
通过调用一个startActivuty()方法,并传递一个Intent,他用于描述Activity,表明你的意图,启动另一个Activity还是你想展现的动作。如:
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
Intent intent=new Intent(Intent.ACTION_SEND);
intent.putExtra(key,values);
startActivity(intent);
启动一个带返回的结果的Activity:
必需使用startActivityForResult()来代替startActivity();并且重写onActivityResult()得到返回结果。下面是安卓官方的一个例子:

private void pickContact() {    // Create an intent to "pick" a contact, as defined by the content provider URI    Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);    startActivityForResult(intent, PICK_CONTACT_REQUEST);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    // If the request went well (OK) and the request was PICK_CONTACT_REQUEST    if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {        // Perform a query to the contact's content provider for the contact's name        Cursor cursor = getContentResolver().query(data.getData(),        new String[] {Contacts.DISPLAY_NAME}, null, null, null);        if (cursor.moveToFirst()) { // True if the cursor is not empty            int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);            String name = cursor.getString(columnIndex);            // Do something with the selected contact's name...        }    }}

这个例子展示了使用onActivityResult() 来获取结果的基本方法。 第一步要判断请求是否被成功响应,通过判断resultCode 是不是

RESULT_OK—, 然后判断这个响应是不是针对相应的请求— ,此时只要判断requestCode 和发送时提供的第二个参数 startActivityForResult() 

是否相匹配。 最后,查询 Intent中的data信息。 (data 参数)。

0 0
原创粉丝点击