
①新建一个 ActivityCollector 类,作为活动管理器,代码如下所示:
public class ActivityCollector {
public static List<Activity>activities = new ArrayList<>()
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()
}
}
activities.clear()
//以下是杀死当前程序进程的代码,保证程序彻底退出。
android.os.Process.killProcess(android.os.Process.myPid())
}
}
②再新建一个类BaseActivity,并让所有活动继承这个类,也就是其他的全部活动都改为extends BaseActivity,而不是原来的extends AppCompatActivity。
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
Log.d("BaseActivity", getClass().getClass().getSimpleName())
ActivityCollector.addActivity(this)
}
@Override
protected void onDestroy() {
super.onDestroy()
ActivityCollector.removeActivity(this)
}
}
③在你想要退出程序的页面(Activity)的setContentView(R.layout.*****)下面加上如下代码,从而实现点击一个按钮退出整个程序。
Button button3 = (Button) findViewById(R.id.*****)
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ActivityCollector.finishAll()
}
})
//*号部分看具体情况而定
ThenActivity.this.finish()//结束当前ActivityIntent startMain = new Intent(Intent.ACTION_MAIN)
startMain.addCategory(Intent.CATEGORY_HOME)
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(startMain)
System.exit(0)// 退出程序
将上面这几句代码放到你的退出程序按钮的点击事件里面就可以了!
重写activty的onkeydown在用户按下返回键的时候调用,所以我们可以通过重写onkeydown的方法实现,还有可能到了MainActivity前面还有其他acitivty存活这,我们需要在onkeydown的时候把所有的activity都结束掉,为了实现这个我们先定义一个BaseActivity,在Oncreate和ondestroy生命周期里存储acitivty的引用用一个List集合存储存活的acitivity,我们把list作为application成员
写一个MyApp类,作为程序启动的application
public class MyApp extends Application{
private List<Activity>activities = new ArrayList<Activity>()
public List<Activity>getActivities(){
return activities
}
}
BaseActivity代码如下
class BaseActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
((MyApp)getApplication()).getActivities().add(this)
}
@Override
protected void onDestroy() {
super.onDestroy()
((MyApp)getApplication()).getActivities().remove(this)
}
}
以后工程里的所有Activity都继承于BaseActivity即可
最后是MainAcitivty的代码,在onkeydown方法里遍历list集合,调用每个activity的finish方法即可
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_two)
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
List<Activity>activities = ((MyApp)getApplication()).getActivities()
for(Activity activity:activities){
activity.finish()
}
return super.onKeyDown(keyCode, event)
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)