在Android中,Activity有个栈,一个Activity结束掉,会回到上一个Activity,并不是退出应用程序。
Android中,退出应用程序的方式:
1.通过pid
int pid = android.os.Process.myPid() //获取当前应用程序的PID
android.os.Process.killProcess(pid) //杀死当前进程
这种方法退出应用,是会保留某些后进程,例如:Service,Notifications等。
2.通过ActivityManager
ActivityManager manager = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE)//获取应用程序管理器
manager.killBackgroundProcesses(getPackageName())//强制结束当前应用程序
这种方式退出应用,会结束本应用程序的一切活动,因为本方法会根据应用程序的包名杀死所有进程包括Activity,Service,Notifications等。
Android中使用fragment来实现页面的切换,如果导致应用停止运行,可能的原因如下:
Fragment所绑定的activity已经被销毁,而程序引用了activity,报空指针就会意外退出。
Fragment新建之后,没有进行commit *** 作,导致无法实例化该Fragment。
解决的方式是在使用activity时,进行判断,如下代码:
@Overridepublic void onHiddenChanged(boolean hidd) {
if (!hidd && getActivity() != null) {
System.out.println("是否执行了这个方法")
}
}
需要做的准备新建一个android项目,主Activity命名为MainActivity
创建三个Fragment1 Fragment2 Fragment3
为三个Fragment创建三个布局文fragment1.xml、fragment2.xml、fragment3.xml
布局 activity_main.xm
fragment1.xml样例
Fragment1样例
另外的可以根据样例进行修改
activity_main.xml内容
activity打开时需要显示一个fragment,也就是需要先向容器中添加一个fragment
这是就能显示第二个fragment了,那么如何切换不同的fragment呢,切换的过程如下
开启事务
调用事务的replace方法,将当前容器的fragment替换为新的fragment
提交事务
注意上图红框中的addToBackStack方法,很多人都不是很清楚这个方法的实际作用,说一下程序运行时候的现象你就明白了
初始化时显示的是 fragment2
实践1 :fragment2------点击按钮frag1-----按返回键--------退出应用
实践2: fragment2-----点击按钮frag3 -----按返回键--------返回到fragment2
为啥会出现上面的情况,原因就是切换到fragment3时,调用了addToBackStack方法,这时会将fragment2先入栈,然后再切换到fragment3,按返回键的时候fragment3销毁,fragment2出栈显示,而切换到fragme1时没有将fragme2入栈,所以fragment2就直接销毁了,再按返回键就直接退出应用了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)