方式一:动态注册广播实现
------- 思路:给每一个运行的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
}
———————————————————————————
方式三:使用启动模式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);
}