部分摘自《第一行代码》郭霖
1.找到当前界面所使用的活动
新建一个类继承Activity,重写其onCreate()方法
public class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("BaseActivity" , getClass().getSimpleName());
}
}
· 让BaseActivity成为项目中所有活动的父类,运行项目。在Android Monitor ->Error下就能
看到当前界面用的活动。
2.随时随地退出程序
新建一个活动管理器类
public class ActivityCollector {
public static List<Activity> activities = new ArrayList<Activity>();
public static void addActivity(Activity activity ){
activities.add(activity);
}
public static void removeActivity(Activity activity ){
activities.remove(activity);
}
public static void finishAll(){
for(Activity activity : activities){
if(!activity.isFinishing()){
activity.finish();
}
}
}
定义每个活动需要继承的父类
public class faActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
}
之后不管在什么地方,只要调用ActivityCollector.finishAll();方法就可以了退出程序了
注:
finish():结束当前Activity,不会立即释放内存。遵循android内存管理机制。
System.exit();和android.os.Process.killProcess(android.osProcess.myPid());
结束当前组件如Activity,并立即释放当前Activity所占资源。
网上几种退出方式测试:
public class BaseActivity extends Activity implements View.OnClickListener{
public static void actionStart(Context context , String data1 , String data2){
Intent intent = new Intent(context ,BaseActivity.class);
intent.putExtra("name1" , data1 );
intent.putExtra("name2" , data2);
context.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.baseactivity);
Button one = (Button) findViewById(R.id.one);
Button two = (Button) findViewById(R.id.two);
Button three = (Button) findViewById(R.id.three);
Button four = (Button) findViewById(R.id.four);
one.setOnClickListener(this);
two.setOnClickListener(this);
three.setOnClickListener(this);
four.setOnClickListener(this);
ActivityCollector.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.one:
android.os.Process.killProcess(android.os.Process.myPid());
// killProcess
break;
case R.id.two:
System.exit(0);
break;
case R.id.three:
ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
break;
case R.id.four:
ActivityCollector.finishAll();
// android.os.Process.killProcess(android.os.Process.myPid());
break;
default:
break;
}
}
}
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button mbutton = (Button) findViewById(R.id.mbutton);
mbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
BaseActivity.actionStart(MainActivity.this , "data1" , "data2");
}
});
}
}
结果:1,2会杀死当前Activity并重建MainActivity界面。3已无效,4成功退出。