android开发之Activity详解

(一)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);
}

@Override
protected 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值