本篇文章笔者在青岛逛街的时候突然想到的...近期就有想写几篇关于宋体关闭的文章,所以回家到之后就奋笔疾书的写出来发布了
Android序程关闭法方有多种,网上说的好几种都不可取,比如
(1)、android.os.Process.killProcess(android.os.Process.myPid());
试验证明这个法方只能关闭第一个AActivity,该法方不可取,试测手机为android v2.21
(2)、ActivityManager activityMgr=
(ActivityManager)CActivity.this.getSystemService(ACTIVITY_SERVICE);
activityMgr.restartPackage(getPackageName());
这个法方也是不可以的关闭应用序程的,试测手机为android v2.21,不知道网上那些人的文章为什么说这么写可以,所以啊,弄技巧还得自己多手动
前目总结的可行的法方如下:
一、 每次跳转的时候,就关闭自身这个Activity
种这法方在某个面页要需加载大批数据的情况下就不可取,因为,关闭了,下次还得重新到服务端获得。没有大批数据通信的情况下,种这情况是可取的。
Intent intent=new Intent(AActivity.this,BActivity.class);
startActivity(intent);
AActivity.this.finish();
System.exit(0);
二、 个每activity的父类面里实现BroadCastReceiver,收到广播后关闭
试验是从AActivity.java跳转到BActivity.java,然后再跳转到CActivity.java,最后在CActivity.java,点击关闭应用序程按钮。关闭应用。然后个每Activity都继承BaseActivity.java,BaseActivity.java册注一个广播接收器,收到广播后关闭自身这个Activity,同时取消册注以后的广播接收器。试验证明这个法方是可以退出应用的,但是不全完,在理管应用序程à正在运行 面里还是可以看到以后的应用的。
第1步、父类BaseActivity.java
/**
* 父类
*/
package com.figo.helloworld;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
/**
* @author zhuzhifei
*
*/
public class BaseActivity extends Activity {
//这样个每Activity都有个广播接收器
private BroadcastReceiver mCloseRecver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if ("CLOSE_RECVER".equals(intent.getAction())) {
((Activity) context).finish();
}
}
};
/** Called when the activity is first created. */
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter myIntentFilter = new IntentFilter();
myIntentFilter.addAction("CLOSE_RECVER");
// 册注广播
registerReceiver(mCloseRecver, myIntentFilter);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//个每activity自己的广播接收器在关闭以后activity的时候,取消该接收器
if(mCloseRecver!=null)
{
this.unregisterReceiver(mCloseRecver);
}
}
}
第2步、任何关闭的地方发送一个关闭的广播
sendBroadcast(new Intent("CLOSE_RECVER"));
三、 最优做法:同一搜集activity,退出时同一关闭
路思:个每Activity OnCreate的时候,就参加Application的Activity组数面里去,然后任何一个地方退出的时候,用调Aplication一个exit法方,环循关闭个每Activity,同时记得System.exit(0),本试验也同法方二一样,A,B,C三个Activity,从A跳转到B,B再跳转到C,然后再C点击一个退出应用按钮,用使全完退出以后应用。
第1步、创立自己的Application.java
/**
* 理管Activity的Application
*/
package com.figo.helloworld;
import java.util.ArrayList;
import android.app.Activity;
import android.app.Application;
/**
* @author zhuzhifei
*
*/
public class MyApplication extends Application {
private ArrayList<Activity> allActivities = new ArrayList<Activity>();
private static MyApplication instance;
public static MyApplication getInstance() {
if (instance == null) {
instance = new MyApplication();
}
return instance;
}
// 加添Activity到容器中
public void addActivity(Activity activity) {
allActivities.add(activity);
}
// 遍历全部Activity并finish
public void exit() {
for (Activity activity : allActivities) {
activity.finish();
}
System.exit(0);//Android的序程只是让Activity finish()失落,而单纯的finish失落,退出不并全完
instance=null;//自身也空清
}
}
第2步、创立各个Activity
A面页AActivity.java
/**
* @author zhuzhifei
*
*/
public class AActivity extends Activity {
private Button btnA;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.a);
btnA=(Button)findViewById(R.id.btnA);
btnA.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//从A跳转到B面页
Intent intent=new Intent(AActivity.this,BActivity.class);
startActivity(intent);
}
});
//以后Activity加添到Activity组数中去
MyApplication.getInstance().addActivity(this);
}
}
B面页BActivity.java
/**
* @author zhuzhifei
*
*/
public class BActivity extends BaseActivity {
private Button btnB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.b);
btnB=(Button)findViewById(R.id.btnB);
btnB.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//从B跳转到C面页
Intent intent=new Intent(BActivity.this,CActivity.class);
startActivity(intent);
}
});
//以后Activity加添到Activity组数中去
MyApplication.getInstance().addActivity(this);
}
}
C面页CActivity.java
/**
* @author zhuzhifei
*
*/
public class CActivity extends Activity {
private Button btnC;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.c);
btnC=(Button)findViewById(R.id.btnC);
//退出应用序程事件
btnC.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//最优做法 法方一:Activity放在组数面里同一关闭
MyApplication.getInstance().exit();
//试验证明这个法方只能关闭第一个AActivity,该法方不可取,试测手机为android v2.21
// android.os.Process.killProcess(android.os.Process.myPid());
//这个法方也是不可以的关闭应用序程的,不知道网上那些人的文章为什么还写可以,所以啊,弄技巧还得自己多手动
// ActivityManager activityMgr= (ActivityManager)CActivity.this.getSystemService(ACTIVITY_SERVICE);
// activityMgr.restartPackage(getPackageName());
//法方二:父类activity面里实现一个广播接收器,现发要需关闭的时候即关闭自己这个Activity
//试验证明以后式方是可以退出应用序程,但是在理管应用序程-->正在运行面里还可以见看以后应用
//sendBroadcast(new Intent("CLOSE_RECVER"));
}
});
//以后Activity加添到Activity组数中去
MyApplication.getInstance().addActivity(this);
}
}
四、另外一种路思是在baseActivity.java面里的onResume()事件面里,如果现发是要需关闭序程,然后finish以后activity,因为,如果activity都不关闭,终最关闭一个的时候,会引起连锁反应,关闭一个的时候,它前面的另外一个就会到resume。具体做法是在application置设一个是不是退出的变量
@Override
protected void onResume() {
super.onResume();
Boolean isExit = (Boolean) getMyApplication().get("EXIT_APP");
if (isExit != null && isExit)
{
finish();
}
}
文章结束给大家分享下程序员的一些笑话语录:
小沈阳版程序员~~~ \n程序员其实可痛苦的了......需求一做一改,一个月就过去了;嚎~ \n需求再一改一调,一季度就过去了;嚎~ \n程序员最痛苦的事儿是啥,知道不?就是,程序没做完,需求又改了; \n程序员最最痛苦的事儿是啥,知道不? 就是,系统好不容易做完了,方案全改了; \n程序员最最最痛苦的事儿是啥,知道不? 就是,系统做完了,狗日的客户跑了; \n程序员最最最最最痛苦的事儿是啥,知道不? 就是,狗日的客户又回来了,程序给删没了!