通过广播BroadcastReciever使Andro…
2013-06-27 16:27
183 查看
相信有过项目经验的同学都遇到过这样的问题,就是设计“退出”功能时可能会遇到有些界面不能关闭的问题。当然如果你的项目所有的界面都在打开另一个界面时被关闭就不存在这个问题了,但大多数情况下这样是很不合理的,因为每次要查看这个界面都需要重新加载数据。尤其对于需要走网络的数据显示,这不仅效率低而且成本高。
网上大概有以下几种方法解决这个问题:
(1) System.exit(0);
(2) Process.killProcess(Process.myPid());
(3) ActivityManageractivityManager
=(ActivityManager) this
.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.restartPackage("packagename");
但这些貌似不是万能的,有的说在2.2版本后就失效了,那我们怎么办呢?在起初的一个项目里我用了一个比较笨的方法,我用一个类来专门管理所有的Activity。这个类里有一个List,每打开一个Activity我就把这个Activity放到这个List中,当退出时再将List中所有的Activity一个一个的关闭。
在后来的项目中发现了一个更好地方法,就是通过广播来完成退出功能,具体实现过程是这样的:在每个Activity创建时(onCreate时)给Activity注册一个广播接收器,当退出时发送该广播即可。大概的代码如下:
@Override
protected void onCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
IntentFilterfilter = new IntentFilter();
filter.addAction("finish");
registerReceiver(mFinishReceiver,filter);
……
}
private BroadcastReceiver mFinishReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Contextcontext,
Intent intent) {
if("finish".equals(intent.getAction())){
Log.e("#########", "Iam
" +getLocalClassName()
+ ",nowfinishing
myself...");
finish();
}
}
};
相信聪明的大家会把上面的代码写在一个基类里面,因为如果你的项目中Activity很多的话,写起来很麻烦,而且也不符合代码规范。
在退出时执行以下代码即可关闭所有界面完全退出程序:
getApplicationContext().sendBroadcast(new Intent("finish"));
网上大概有以下几种方法解决这个问题:
(1) System.exit(0);
(2) Process.killProcess(Process.myPid());
(3) ActivityManageractivityManager
=(ActivityManager) this
.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.restartPackage("packagename");
但这些貌似不是万能的,有的说在2.2版本后就失效了,那我们怎么办呢?在起初的一个项目里我用了一个比较笨的方法,我用一个类来专门管理所有的Activity。这个类里有一个List,每打开一个Activity我就把这个Activity放到这个List中,当退出时再将List中所有的Activity一个一个的关闭。
在后来的项目中发现了一个更好地方法,就是通过广播来完成退出功能,具体实现过程是这样的:在每个Activity创建时(onCreate时)给Activity注册一个广播接收器,当退出时发送该广播即可。大概的代码如下:
@Override
protected void onCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
IntentFilterfilter = new IntentFilter();
filter.addAction("finish");
registerReceiver(mFinishReceiver,filter);
……
}
private BroadcastReceiver mFinishReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Contextcontext,
Intent intent) {
if("finish".equals(intent.getAction())){
Log.e("#########", "Iam
" +getLocalClassName()
+ ",nowfinishing
myself...");
finish();
}
}
};
相信聪明的大家会把上面的代码写在一个基类里面,因为如果你的项目中Activity很多的话,写起来很麻烦,而且也不符合代码规范。
在退出时执行以下代码即可关闭所有界面完全退出程序:
getApplicationContext().sendBroadcast(new Intent("finish"));
相关文章推荐
- 通过开机广播(broadcast)通知应用
- android-BroadcastReceiver 通过终止广播 阻止用户收到短信
- 两个应用通过广播BroadCast传送数据
- Broadcast与service----------通过广播启动服务
- 通过广播接收者(BroadcastReceiver)或守护线程启动服务,录音机监听电话
- Android 通过adb shell am broadcast发送广播 adb命令
- Service通过广播Broadcast更新Activity UI
- Android之BroadcastReceiver讲义并通过广播机制实现短信窃听
- Android Service与Activity之间通信的几种方式(1)---通过broadcast(广播)的形式
- Service通过广播Broadcast更新Activity UI
- andriod之BroadcastReciever--广播接受者,之初认识
- Android实现闹钟,通过AlarmManager+BroadcastReceiver(广播)
- BroadcastReciever广播接收者
- Service通过广播Broadcast更新Activity UI
- andriod之BroadcastReciever--广播接受者,启动acitivity,和service,以及停止service
- 通过sendOrderedBroadcast()方法发送一条有序广播
- Android通过Broadcast(广播)实现开机自启动
- 基础篇(五) BroadcastReciever(广播接收器)和Broadcast(广播)
- Service通过广播Broadcast更新Activity UI
- 在C中通过am broadcast发送广播通知