由于业务需求,我们有时会碰到这样的问题:有一系列Activity直行流程为,A->B->C-D, B可以返回到A,C可以返回到B,但是从D返回必须直接退出程序,
由于A,B,C可以前进也可以后退,所以单纯的调用finish()方法不行,下面是一种使用广播来实现这个功能。
1,实现一个Service,这个Service能够发送广播。
public class FinishActivityService extends IntentService{
public static final String FINISH_ACTIVITY_ACTION = "com.compusassistant.broadcastreceiver.finish";
public FinishActivityService() {
super("FinishActivityService");
}
@Override
protected void onHandleIntent(Intent intent) {
Intent broadcastIntent = new Intent(FINISH_ACTIVITY_ACTION);
sendBroadcast(broadcastIntent);
}
}
2,在A,B,C中都注册一个广播
public class ActivityA extends Activity
private static final String TAG = "ActivityA";
private Context mContext = this;
private IntentFilter mIntentFilter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.select_school_activity);
mIntentFilter = new IntentFilter(FinishActivityService.FINISH_ACTIVITY_ACTION);
registerReceiver(finishActivityReceiver, mIntentFilter);
}
BroadcastReceiver finishActivityReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
};
<span style="white-space:pre"> </span>public void onDestroy(){<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
<span style="white-space:pre"></span><pre code_snippet_id="588048" snippet_file_name="blog_20150124_2_5349661" name="code" class="java"><span style="white-space:pre"> </span>unregisterReceiver(finishActivityReceiver);
<span style="white-space:pre"> </span>}
}
3,在D中启动服务
public class MainActivity extends Activity{
private static final String TAG = "BaseActivity";
private Context mContext = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
startService(new Intent(mContext,FinishActivityService.class));
}
}
这样,当进入到D后,返回后会直接退出程序了