首页 > 编程知识 正文

android leakcanary原理,安卓bundleintent

时间:2023-05-04 22:55:04 阅读:110967 作者:1428

安卓01:安卓studio目录结构介绍,安卓开发入门

02:安卓日志工具类Log详细信息

添加03:Button元素并在活动中使用Toast和Menu

04:安卓开发的Intent使用指南(显式Intent和隐式Intent ) ) )。

0:安卓广播的结构解说(标准广播和有序广播) ) ) )。

06:通过Android广播实现强制脱机功能(实现Kotlin语言) ) ) ) ) )。

显示Intent Intent是Android程序中组件之间进行交互的重要方式之一,它不仅可以指示当前组件希望执行的操作,还可以在不同的组件之间传递数据。 Intent一般可以用于事件开始、服务开始、广播发送等场景,但这次用于事件开始。 Intent大致分为两种类型:显式Intent和隐式Intent。 首先来看看显式Intent的使用方法。 首先是两个事件: 1.FirstActivity (第一个事件) packageactivitytest.example.administrator.activity test; import android.content.Intent; import Android.support.V7.app.appcompatactivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.Toast; publicclassfirstactivityextendsappcompatactivity { @ overridepublicbooleanonoptionsitemselected (menuitem item ) switch ) itch 360toast.maketext(this,' You clicked Add ',Toast.LENGTH_SHORT ).show ); 布雷克; caser.id.remove _ item 3360 toast.maketext (this,' You clicked Remove ',Toast.LENGTH_SHORT ).show ); 布雷克; default : }返回真; } @ overridepublicbooleanoncreateoptionsmenu (menu menu ) ) { getMenuInflater ).inflate ) r.menu.main,menu ); 返回真; } @ overrideprotectedvoidoncreate (bundlesavedinstancestate ) super.oncreate (savedinstancestate ); setcontentview (r.layout.first _ layout; buttonbutton1=(button ) findviewbyid(r.id.button_1); button1. setonclicklistener (new view.onclick listener ) ) @overridepublicvoidonclick ) viewv ) intent intent=newintent (); }第一个活动配置文件(first_layout.xml ) : XML version=' 1.0 ' encoding=' utf-8 '? linearlayoutxmlns 3360 Android=' http://schemas.Android.com/apk/RES/安卓'安卓3360 layout _ width=' match _ parent '安卓3360 layout _ height=' match _ parent '安卓3360 orid

lt;/LinearLayout> 2.SecondActivity(第二个活动) package activitytest.example.administrator.activitytest;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_layout); }} 第二个活动的配置文件(second_layout.xml): <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/second_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="activitytest.example.administrator.activitytest.SecondActivity"><LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/button_2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button 2"/></LinearLayout></RelativeLayout> 总的配置文件(AndroidManifest.xml): <?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="activitytest.example.administrator.activitytest"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".FirstActivity" android:label="This is FirstActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SecondActivity"></activity> </application></manifest> Intent有多个构造函数的重载,其中一个是Intent(Context packageContext,Class<?>cls)。这个构造函数接收两个参数,第一个参数Context要求提供一个启动活动的上下文,第二个参数class 则是指定想要启动的目标活动,通过这个构造函数就可以构建出Intent的”意图”。然后我们应该怎么使用这个Intent呢? Activity 类中提供了一个startActivity()方法,这个方法是专门用于启动活动的,它接收一个Intent参数,这里我们将构建好的Intent传入startActivity()方法就可以启动目标活动了。FirstActivity 中按钮的点击事件的代码如下所示: @Override public void onClick(View v) { Intent intent = new Intent(FirstActivity.this,SecondActivity.class); startActivity(intent); } 我们首先构建出了一个Intent,传入 FirstActivity.this 作为上下文,传入SecondActivity.class 作为目标活动,这样我们的“意图”就非常明显了,即在FirstActivity这个活动的基础上打开SecondActivity这个活动。然后通过startActivity()方法来执行这个Intent.

运行结果:

这时候已经切换到了第二个应用.

可以看到,我们已经成功启动SecondActivity这个活动了。如果你想要回到上一个活动怎么办呢?很简单,按下Back键就可以销毁当前活动,从而回到上一个活动了。使用这种方式来启动活动,Intent的“意图”非常明显,因此我们称之为: 显式 Intent。 2. 隐式Intent 相比于显式Intent,隐式Intent则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action和 category 等信息,然后交由系统去分析这个Intent,并帮我们找出合适的活动去启动。什么叫作合适的活动呢?简单来说就是可以响应我们这个隐式Intent的活动,那么目前SecondActivity可以响应什么样的隐式Intent呢?额,现在好像还什么都响应不了,不过很快就会有了。通过在<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和 category,打开AndroidManifest.xml,添加如下代码: <activity android:name=".SecondActivity"> <intent-filter> <action android:name="activitytest.example.administrator.activitytest.ACTION_START"></action> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>

!这里的activitytest.example.administrator.activitytest是活动所在的地址

在<action>标签中我们指明了当前活动可以响应activitytest.example.administrator.activitytest.ACTION_START这个action,而<category>标签则包含了一些附加信息,更精确地指明了当前的活动能够响应的Intent中还可能带有的category。只有<action>和<category>中的内容同时能够匹配上Intent中指定的action和 category时,这个活动才能响应该Intent。修改FirstActivity 中按钮的点击事件,代码如下所示: @Override public void onClick(View v) { Intent intent = new Intent("activitytest.example.administrator.activitytest.ACTION_START"); startActivity(intent); } 可以看到,我们使用了Intent 的另一个构造函数,直接将action的字符串传了进去,表明我们想要启动能够响应activitytest.example.administrator.activitytest.ACTION_START这个action的活动。那前面不是说要<action>和<category>同时匹配上才能响应的吗?怎么没看到哪里有指定category呢?这是因为android.intent.category.DEFAULT是一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到 Intent中。重新运行程序,在FirstActivity 的界面点击一下按钮,你同样成功启动SecondActivity了。不同的是,这次你是使用了隐式Intent 的方式来启动的,说明我们在<activity>标签下配置的action和 category 的内容已经生效了!

运行结果:

每个Intent中只能指定一个action,但却能指定多个category。目前我们的Intent中只有一个默认的category,那么现在再来增加一个吧。修改FirstActivity中按钮的点击事件,代码如下所示: public void onClick(View v) { Intent intent = new Intent("activitytest.example.administrator.activitytest.ACTION_START"); intent.addCategory("activitytest.example.administrator.activitytest.MY_CATEGORY"); startActivity(intent); } }); 现在我们在AndroidManifest.xml的<intent-filter>中再添加一个category的声明,如下所示: <activity android:name=".SecondActivity"> <intent-filter> <action android:name="activitytest.example.administrator.activitytest.ACTION_START"></action> <category android:name="android.intent.category.DEFAULT" /> <category android:name="activitytest.example.administrator.activitytest.MY_CATEGORY"/> </intent-filter> </activity>

再次重新运行程序,你就会发现一切都正常了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。