当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 实现一键退出所有的activity

实现一键退出所有的activity 时间:2018-09-28      来源:未知

方式一:动态注册广播实现

------- 思路:给每一个运行的Activity都设置广播监听器,并

且监听的广播监听器的Type都是相同的

--------动态注册广播监听器并实施监听

--------这样当所有监听的Activity同类型的Type就会监听到,

--------然后Finsh(),这样就可以实现一键退出所有的 Activity

方式二:把所有的activty放入同一个List中,从List中

取出所有activity调用finish()方法

方式三:抛出异常

方式四:SingleTask

———————————————————————————

代码实现:动态注册广播实现

在一个Activity中发送广播

package demo.baidumapsdk.onekey_backactivity;

import android.content.Intent;

import android.content.IntentFilter;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

//发送广播

public void send(View view){

//发送广播

Intent intent = new Intent();

intent.setAction("back");//设置发送广播类型

MainActivity.this.sendBroadcast(intent);//发送广播

}

___________________________________________________________

在另一个Activity中动态注册广播并监听

package demo.baidumapsdk.mychar1;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import com.hyphenate.chat.EMClient;

import com.hyphenate.exceptions.HyphenateException;

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//动态注册广播

MyReceive myReceive = new MyReceive();

IntentFilter filter = new IntentFilter();

filter.addAction("back");

registerReceiver(myReceive,filter);

———————————————————————————

在动态注册广播监听的Activity中写类实现BroadCastReceive,并重写onReceive方法

package demo.baidumapsdk.mychar1;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.widget.Toast;

//动态注册广播监听

public class MyReceive extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

String intent1 = intent.getAction();//获取广播类型

//TODO

//在这里就可以操作一些事情,比如退出Activity

Toast.makeText(context,intent1,Toast.LENGTH_SHORT).show();

}

}

___________________________________________________________

代码实现方式二:把所有的activty放入同一个List中,从List中

取出所有activity调用finish()方法

public class MainActivity extends AppCompatActivity{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//把当前Activity装进list,类名.对象

Util_List.list.add(this);

//创建Button

Button button = new Button(this);

button.setText("启动A");

setContentView(button);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent(MainActivity.this,TwoActivity.class);

startActivity(intent);

}

});

}

@Override

protected void onDestroy() {

Util_List.list.remove(this);

super.onDestroy();

Log.i("Fslog","MyActivity的OnDestory被执行");

}

}

———————————————————————————

public class TwoActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//将当前的Activity装进list

Util_List.list.add(this);

//不依赖布局文件,自己创建

Button button = new Button(this);

button.setText("退出");

setContentView(button);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

TwoActivity.this.finish();

}

});

}

@Override

protected void onDestroy() {

//从list中取出所有的Activity,执行finsh方法

//在遍历值前应该判断:如果你遍历的是一个空的Activity对象,

// for-each循环将抛出NullPointerException,因此在遍历前你总是应该检查空引用。

if (Util_List.list!=null){

//遍历:第一部分:是遍历的对象(Activity),第二部

分:是存放对象的容器(Util_List.list)

for (Activity activity:Util_List.list){

activity.finish();

}

}

super.onDestroy();

}

}

———————————————————————————

public class Util_List {

public static final ArrayList list = new ArrayList();

}

———————————————————————————

方式三:使用启动模式SingleTask

在这个地方:我们要注意启动模式设置为SingleTask必须是入口组件

SingleTask是单一实例,后会回调onNewIntent()

onNewIntent的回调机制:launchMode为singleTask的时候,通过Intent启到一个Activity,如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法, 不要忘记,系统可能会随时杀掉后台运行的Activity,如果这一切发生,那么系统就会调用onCreate方法,而不调用onNewIntent方法,一个好的解决方法就是在onCreate和onNewIntent方法中调用同一个处理数据的方法

__________________________________________________________________

代码:

android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">

android:launchMode="singleTask">

 

 

———————————————————————————

@Override

protected void onNewIntent(Intent intent) {

finish();

super.onNewIntent(intent);

}

上一篇:Android传感器开发

下一篇:Unity3D基础—基本物体和基本组件介绍

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部