部分摘自《第一行代码》郭霖
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成功退出。