activity之间通信、销毁

 

1.销毁一个activity

使用android手机的black按键或者使用finish()方法

 

btn_test.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

finish();//销毁activity

}

});

★activity一键强制退出(销毁多个Activity)

思路:创建一个List装所有创建的activity,再写一个removeActivity()方法关闭所有的activity退出程序

 

import android.app.Activity;

 

import java.util.ArrayList;

import java.util.List;

/**

*类名称:ActivityCollector

*功能:新建或关闭Activity处理类

*@authorsxl

*@version1.0.0

*/

public class ActivityCollector {

 

public static List<Activity> activities = new ArrayList<Activity>();

/**

* 函数名称:addActivity

* 功能:向activities中添加activity

* @param: [activity]

* @return: void

* @exception:

* @author: sxl

* @version:

*/

public static void addActivity(Activity activity){

activities.add(activity);

 

}

/**

* 函数名称:removeActivity

* 功能:将已经关闭的activity移除Activity集合

* @param: [activity]

* @return: void

* @exception:

* @author: sxl

* @version:

*/

public static void removeActivity(Activity activity){

activities.remove(activity);

 

}

/**

* 函数名称:finishAll

* 功能:关闭掉list集合中所有没有关闭掉的Activity

* @param: [activities]

* @return: void

* @exception:

* @author: sxl

* @version:

*/

public static void finishAll(List<Activity> activities){

for(Activity activity:activities){

if(!activity.isFinishing()){

activity.finish();

}

}

}

}

 

2.多个Activity之间切换通信

 

使用Intent:Intent有两种:显式、隐式

  • 显式Activity切换方式

首先Activity要在AndroidManifest.xml中注册(这些Android Studio都会帮我们做)

 

 

配置文件里不用做任何配置,只要注册第二个activity就可以了

//其中第一个是主activity;第二个参数是要切换的Activity类

Intent intent = new Intent(FirstActivity.this,SecondActivity.class);

startActivity(intent);

  • 隐式Activity切换方式

将设置好action、category等信息的Activity交给Intent处理,Intent会找到合适的Activity去响应

 

最普通的隐式启动

<intent-filter>

<action android:name="AUTO_START"/>

<!--category在不指定的是有默认为DEFAULT 但是我在使用的时候不指定会报错-->

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

 

代码部分:

Intent intent_yinshi = new Intent("AUTO_START");

startActivity(intent_yinshi);

隐式启动加载拨打电话、网页、位置信息

 

<!--category在不指定的是有默认为DEFAULT 但是我在使用的时候不指定会报错-->

<action android:name = "android.intent.action.VIEW"/>

<category android:name="android.intent.category.DEFAULT"/>

<!--<data android:scheme="tel" />-->

<data android:scheme="http"/>

 

代码部分:

Intent intent_yinshi = new Intent(Intent.ACTION_DIAL);

intent_yinshi.setData(Uri.parse("http://www.baidu.com"));

// intent_yinshi.setData(Uri.parse("tel:10086"));

startActivity(intent_yinshi);

  • activity之间参数传递

发送端:putExtra()

接收端:首先用getIntent()方法获取Intent;然后用getIntExtra()方法获取传递值

 

//我这里用的隐式进行参数传递的

<intent-filter>

<action android:name="AUTO_START"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

代码部分

发送端:

//传递数据 用putExtra()

intent_yinshi.putExtra("in_data",1);

接收端:

Intent intent = getIntent();

int value = intent.getIntExtra("in_data",0);

  • activity结束返回信息给上一个Activity

 

上一个Activity的发送端代码:

Intent intent = new Intent(FirstActivity.this,SecondActivity.class);

intent.putExtra("data",1);

startActivityForResult(intent,1);

下一个Activity返回信息:

Intent void_intent = new Intent();

void_intent.putExtra("return","我收到你发的1了。。。。");

setResult(RESULT_OK,void_intent);

finish();

上一个Activity触发的函数:

/**

* 函数名称:onActivityResult

* 功能:接收刚刚下一个Activity返回的信息

* @param: [requestCode, resultCode, data]

* @return: void

* @exception:

* @author: sxl

* @version:

*/

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

switch (requestCode){

case 1:

if(resultCode==RESULT_OK){

String result = data.getStringExtra("return");

Log.e("log",result+"..............");

}

break;

default:

}

}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值