怎么在android实现退出功能

怎么在android实现退出功能,第1张

Android Studio中,随时随地的退出程序(记得导入相应的包,可以设置自动导入所需的包的,下面的代码还没有导入包的部分):

①新建一个 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()//结束当前Activity

Intent 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)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7766018.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-09
下一篇2023-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存