①新建一个 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()
}
})
//*号部分看具体情况而定
如果退出整个程序,如下 *** 作:方式一:Intent intent=new Intent(Intent.ACTION_MAIN)intent.addCategory(Intent.CATEGORY_HOME)intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)this.startActivity(intent)System.exit(0)方式二:android.os.Process.killProcess(android.os.Process.myPid())android 完全退出程序有几个activity,有一需求是在一个activityA点击back键退出系统而不是跳到之前的activity首先想到的是清空activityA的昌或堆栈,使用intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)但是该activityA不是已经存在于堆栈底端的,所以清除的只是堆栈中该activityA上面耐吵伍碰中的activity,但后退后还是会返回堆栈中该activityA下面的activity。1.后面添加了一个菜单返回功能键,这个方法也只能用system.exit(0)来关闭当前活动的Activity,附代码:public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu)
MenuItem item = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, "Exit")
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener()
{
public boolean onMenuItemClick(MenuItem item)
{
System.exit(0)
return true
}
})
return true
}
2.这样太不方便,每次退出界面之后应用程做罩轿序还在运行,
网上提供了几种方法,将下面SysApplication这个类复制到工程里面,然后纯肆在每个Acitivity的oncreate方法里面通过SysApplication.getInstance().addActivity(this)添加当前Acitivity到ancivitylist里面去闷手,最后在想退出的时候调用SysApplication.getInstance().exit()可直接关闭所有的Acitivity并退出应用程序。
附代码:
import java.util.LinkedList
import java.util.List
import android.app.Activity
import android.app.AlertDialog
import android.app.Application
import android.content.DialogInterface
import android.content.Intent
public class SysApplication extends Application {
private List mList = new LinkedList()
private static SysApplication instance
private SysApplication() {
}
public synchronized static SysApplication getInstance() {
if (null == instance) {
instance = new SysApplication()
}
return instance
}
// add Activity
public void addActivity(Activity activity) {
mList.add(activity)
}
public void exit() {
try {
for (Activity activity : mList) {
if (activity != null)
activity.finish()
}
} catch (Exception e) {
e.printStackTrace()
} finally {
System.exit(0)
}
}
public void onLowMemory() {
super.onLowMemory()
System.gc()
}
}
3.在应用程序里面 的activity的oncreate里面添加SysApplication.getInstance().addActivity(this)
如:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
SysApplication.getInstance().addActivity(this)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)