当前位置: 移动技术网 > IT编程>移动开发>Android > Activity配置、启动和关闭activity实例详解

Activity配置、启动和关闭activity实例详解

2019年07月24日  | 移动技术网IT编程  | 我要评论

广东宏远篮球俱乐部,电车之狼漫画,豪门小妻子boss大人缠上门

大家先看下效果图:

android为我们提供了四种应组件,分别为activity、service、broadcast receivers和content providers,这些组建也就是我们开发一个android应用程序的基石。系统可以通过不同组建提供的切入点进入到开发的应用程序中。对用户来说不是所有的组建都是实际的切入点,但是他们之间都是相互依赖的,它们每一个作为存在的实体,扮演着特定的角色,作为独一无二的基石帮助开发者定义android应用的行为。下面我将整理自己的activity学习点滴:

一个acitvity作为一个显示在屏幕上的用户交互界面,比如在电子邮件应用中,一个用来显示收件列表的activity,一个用来写邮件的activity,一个阅读邮件内容的activity,等等。activity用来提供用户体验,许多不同体验的activity聚集在一起即可以形成一个android应用程序的用户体验,每一activity都是相互独立的。应用除了可以访问自己的activity,也可以访问其他app的acitivity(需要被app允许)。

1.如何创建一个activity?

必须创建一个activity的 子类,在子类中需要实现activity状态在生命周期中切换时系统回调的函数(oncreate、onstart、onresume、onpause、onstop、ondestroy),当然并非所有的函数都需要重新实现。其中两个比较重要的函数为oncreate和

onpause:

oncreate(),此方法必须要重写。系统调用此方法创建activity,实现该方法是你初始化你所创建activity的重要步骤。其中最重要的就是调用 setcontentview() 去定义你的要展现的用户界面的布局。

onpause(),当系统任务用户离开此界面时会调用此方法,此时并非销毁一个activity。通常在这里就要处理一些持久超越用户会话的变化,比如:数据的保存。

为了保证流畅的用户体验和处理,你可以调用其他的回调函数来使你的atctivity停止或销毁。在onstop()方法中,一般做一些大资源货对象的释放,如:网络或者数据库连接。可以在onresume时再加载所需要资源。

2创建activity

public class mainactivity extends activity { 
//必须重写的方法 
@override 
protected void oncreate(bundle savedinstancestate) { 
super.oncreate(savedinstancestate); 
setcontentview(r.layout.activity_main);//activity的布局 
} 
}

2.一个activity创建完成后,为了它可以访问系统必须要声明注册它到应用的androidmanifest.xml文件中:

<activity 
android:name="com.zy.demo.activity.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>有很多属性供开发者定义不同特色的activity,比如lable、icon或者theme、style等。其中android:name是必须的属性,用来定义activity的名字,当应用发布后不能改变。

<activity>还提供各种intent-filter,使用<intent-filter>来声明其它应用组件如何激活(启动)activity,<intent-filter>有包含<action>和<category>两个元素。如上例中<action android:name="android.intent.action.main" />用来表示此activity需要响应android.intent.action.main(表明为应用程序的主要入口),<category android:name="android.intent.category.launcher" />表示activity为launcher类别,即应用程序会列在launcher中,允许用户直接启动。以上也是一个应用的主activity所必须的声明方法:一个main action,和一个launcher category。如果要activity响应其他应用的隐式的intent,则需要为activity声明对应action,还可以添加categor和data。

3.activity的启动

3.1 startactivity

通过调用startactivity(intent)启动activity,intent用来准确的描述你要启动的activity,或者你要进行的action,intent也可以用来携带小数据给被启动acitivity。

当在同一个应用中间需要简单启动另一个activity,intent明确的定义你要启动activity类即可:

//定义一个intent,指名要启动的activity:tostartactivity 
intent intent = new intent(mainactivity.this,tostartactivity.class); 
//使用startactivity(),启动activity 
startactivity(intent); 

在你的应用程序需要执行一些自身没有activity可以执行的行为时,我们可以使用手机上的其他应用程序的activity来代替执行。比如发送一个mail、查看一张图片、搜索一个单词等等。这个里也就是intent的重要指出,你可以定义一个intent描述你想要做的行为,等你发送给系统后,系统会启动合适的acitivty帮你执行,如果有多个应用的activity都可以处理此行为时,系统会让用户去选择一个。当此activity执行完毕后,原来的activity将比

//跨应用从google界面搜索 
intent intent = new intent(intent.action_web_search); 
intent.putextra(searchmanager.query, "zy"); 
startactivity(intent); 

当跨应用启动activity时,在定义intent时必须要为他指定具体的acitvity,前提是此activity必须暴露在自己应用程序之外(android:exported="true"):

intent intent = new intent(); 
//指定要启动组建完整的包名,对象名 
componentname cn = new componentname("com.android.settings", 
"com.android.settings.runningservices"); 
intent.setcomponent(cn); 
// 使用context.startactivity()时需要新启一个任务 
intent.addflags(intent.flag_activity_new_task); 
startactivity(intent);

3.2 startactivityforresult

通过调用 startactivityforresult(intent),来接收到启动的acitivity反馈的结果。为了接收接下来启动的activity的结果,需要重写onactivityresult()这个回调函数。当调用的activity完成后,它将返回一个含有结果的intent给onactivityresult()处理。比如,在应用程序的activity中,需要用户选择联系人中的一个,activity需要得到联系人的部分信息:

intent intent = new intent(intent.action_pick, 
contacts.people.content_uri); 
//启动一个带有选择联系人返回结果的activity 
startactivityforresult(intent, pick_contact_request); 
这里的pick_contact_request为自定义的int型请求反馈结果代码。
//重新onactivityresult()用来处理接收到的返回结果 
@override 
protected void onactivityresult(int requestcode, int resultcode, intent data) { 
// 如果请求requestcode成功,且请求返回的结果resultcode是我们要的pick_contact_request 
if (resultcode == activity.result_ok 
&& requestcode == pick_contact_request) { 
// 处理intent返回的数据,在联系人数据库中查找联系人的名字 
cursor cursor = getcontentresolver().query(data.getdata(), 
new string[] { contacts.people.name }, null, null, null); 
if (cursor.movetofirst()) { // 如果cursor不为空,就查找出联系人的名字 
int columnindex = cursor.getcolumnindex(contacts.people.name); 
string name = cursor.getstring(columnindex); 
//添加其他功能 
} 
} 
}

这里在要说明是onactivityresult()使用来处理返回结果的,首先要检查的是请求是否成功,然后是否有返回结果,结果是否是startactivityforresult()中所要的,如果满足,则处理通过intent返回的数据。

4.关闭activity

1 activity可以调用finish()方法关闭自己,也可以通过调用finishactivity()的方法关闭一个独立的之前启动的activity。

2 调用finishactivity()的方法关闭一个独立的之前启动的activity

//此方法用在关闭使用startactivityforresult(requestcode)启用的activity 
this.finishactivity(requestcode); 

关于何时关闭一个activity,一般由系统直接为我们管理。但是当你确认用户不用返回到此activity时,我们调用以上方法关闭对应的activity。

5 demo代码:

package mm.shandong.com.testusea;
import android.content.intent;
import android.support.v7.app.appcompatactivity;
import android.os.bundle;
import android.view.view;
public class testuseaactivity extends appcompatactivity {
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_test_use_a);
}
//启动第一个activity
public void startfirstactivity(view view) {
intent intent = new intent(this, testuseaactivity2.class);
startactivity(intent);
}
//启动第二个activity
public void startsecondactivity(view view) {
intent intent = new intent(this, testuseaactivity3.class);
startactivity(intent);
}
//启动第三个activity,这个activity 4秒钟后被关闭
public void startthirdactivity(view view) {
intent intent = new intent(this, testuseaactivity4.class);
startactivityforresult(intent, 1);
new thread() {
@override
public void run() {
try {
thread.sleep(4000);
finishactivity(1);
} catch (interruptedexception e) {
e.printstacktrace();
}
}
}.start();
}
}

以上所述是小编给大家介绍的activity配置、启动和关闭activity实例详解,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网