Android(java)学习笔记162:开发一个多界面的应用程序之两种意图

时间:2020-12-18 19:48:28

1.两种意图:

(1)显式意图:

在代码里面用intent设置要开启Activity的字节码.class文件;

(2)隐式意图:

Android(java)学习笔记218:开发一个多界面的应用程序之人品计算器的简单实现在代码里面设置intent的action和data,框架通过解析清单文件去找到Activity,然后才去开启;

 (3)比较 显式意图 和 隐式意图 优缺点?

显式意图:

             优点:代码编写很简单,无需额外的配置,只需要指定要激活的组件字节码.class就可以了,不需要在清单文件中配置意图过滤器<intent-filter>

             缺点:代码的耦合性比较强。(高内敛、低耦合是我们追求的)

             应用场景:自己应用程序开启自己的界面,推荐使用显示意图,效率高。

隐式意图:

             应用场景:开启别人的应用程序的界面  或者 自己的界面,想让别的应用程序开启。

2.在Android(java)学习笔记218:开发一个多界面的应用程序之人品计算器的简单实现笔记中,使用是隐式意图;

这里我们修改成显示意图,如下:

(1)MainActivity.java,修改为如下:

 package com.itheima.rpcalc;

 import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText; public class MainActivity extends Activity {
private Button bt_start;
private EditText et_name; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_start = (Button) findViewById(R.id.bt_start);
et_name = (EditText) findViewById(R.id.et_name);
bt_start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 跳转到第二个界面
Intent intent = new Intent(MainActivity.this,CalcActivity.class);
intent.setData(Uri.parse("calc://"+et_name.getText().toString()));//传递数据给另一个CalcActivity,但是不用在清单文件中注册
startActivity(intent);
}
});
}
}

同时这里的AndroidMainfest.xml如下:

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itheima.rpcalc"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.itheima.rpcalc.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 声明一个新的界面 -->
<!-- 这里只需要声明一下Activity,不用注册data,action,schem等等数据-->
<activity android:name="com.itheima.rpcalc.CalcActivity"> </activity>
</application> </manifest>

其他代码不做修改。

(2)明显我们上面这些修改成显式意图,省略了在清单文件声明,更方便。