finish、killProcess 使用必知_one App two Activity
来源:互联网 发布:淘宝申诉进程在哪看 编辑:程序博客网 时间:2024/04/30 12:03
接着 finish、killProcess 使用必知_one App onr Activity 聊吧!
现在情况是这样的,Service (代码还是上篇的,没变化,在此就不粘贴了!)还是在后台检测 Task 的内容,另外一个 Project 有两个 Activity(TaskDemoActivity、SecondActivity),启动这个 Project,然后由 TaskDemoActivity 启动 SecondActivity。
两个 Activity 的布局界面很简单,就是一个按钮,TaskDemoActivity 的代码跟前面类似。
TaskDemoActivity 代码,就不详细贴出,唯一改变的是按钮事件,如下:
public void onGo(View view) {
Intent intent = new Intent(TaskDemoActivity.this, SecondActivity.class);
startActivity(intent);
}
其余的就是几个回调方法,然后打印其信息!
SecondActivity 代码,也没有什么东西,但是为了便于说明,还是附在下面。
package mark.zhang.demo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class SecondActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
Log.d("mark", "SecondActivity === onCreate() ");
}
@Override
protected void onResume() {
super.onResume();
Log.d("mark", "SecondActivity === onResume() ");
}
@Override
protected void onStart() {
super.onStart();
Log.d("mark", "SecondActivity === onStart() ");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("mark", "SecondActivity === onRestart() ");
}
@Override
protected void onPause() {
super.onPause();
Log.d("mark", "SecondActivity === onPause() ");
}
@Override
protected void onStop() {
super.onStop();
Log.d("mark", "SecondActivity === onStop() ");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("mark", "SecondActivity === onDestroy() ");
}
public void onOver(View view) {
// 待续
}
}
ok, 废话一大堆,下面开始正式工作。
第一个测试:
public void onOver(View view) {
android.os.Process.killProcess(android.os.Process.myPid());
}
Service 侦测到 Task 里面还是有 TaskDemoActivity,这说明 killProcess 方法不可以结束整个 App,只是结束 Activity 本身(SecondActivity)。
第二个测试:
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("mark", "SecondActivity === onDestroy() ");
android.os.Process.killProcess(android.os.Process.myPid());
}
public void onOver(View view) {
finish();
}
先看 TaskDemmoActivity 的生命周期变化(TaskDemoActivity --- 点击按钮 --- SecondActivity --- 点击按钮):
D/mark ( 367): TaskDemoActivity === onCreate()
D/mark ( 367): TaskDemoActivity === onStart()
D/mark ( 367): TaskDemoActivity === onResume()
D/mark ( 367): TaskDemoActivity === onPause()
D/mark ( 367): TaskDemoActivity === onStop()
D/mark ( 367): TaskDemoActivity === onRestart()
D/mark ( 367): TaskDemoActivity === onStart()
D/mark ( 367): TaskDemoActivity === onResume()
可以看出, TaskDemoActivity 并没有调用 onDestroy,说明没有结束这个 App。但是,结果是 TaskDemoActivity 没有在前台,直接回到了主界面Home。
最让人郁闷的是 Service 很久一段时间都会检测到该 Activity 的存在,3-4s 之后 Service 检测不到 TaskDemoActivity 了!按理说 TaskDemoActivity 会一直在阿,为什么过一会就没有了呢?
如果,在此启动这个 App,会发现 TaskDemoActivity 会这样:
D/mark ( 367): TaskDemoActivity === onCreate()
D/mark ( 367): TaskDemoActivity === onStart()
D/mark ( 367): TaskDemoActivity === onResume()
那麽,SecondActivity 的生命周期变化:
D/mark ( 367): SecondActivity === onCreate()
D/mark ( 367): SecondActivity === onStart()
D/mark ( 367): SecondActivity === onResume()
D/mark ( 367): SecondActivity === onPause()
D/mark ( 367): SecondActivity === onStop()
D/mark ( 367): SecondActivity === onDestroy()
可以看出,SecondActivity 已经结束了!
这就说明,android.os.Process.killProcess(android.os.Process.myPid()) 不靠谱!有坑爹的嫌疑!
如果,你的 App 设计遇到类似的问题,请仔细测试!
- finish、killProcess 使用必知_one App two Activity
- finish、killProcess 使用必知_one App one Activity
- 关闭 Activity 关闭方式 finish(), exit(), killProcess(), restartPackage()
- 关闭 Activity 关闭方式 finish(), exit(), killProcess(), restartPackage()
- Activity finish()
- activity finish
- Android中killProcess()、System.exit(0)及finish()的区别
- killprocess
- killprocess
- Android Activity必知
- Android Activity Lifecycle(Finish)
- Activity.finish()学习
- 认识((Activity)getContext()).finish()
- adapter如何finish activity
- android开发时,finish(),android.os.Process.killProcess(android.os.Process.myPid());跟System.exit
- android开发时,finish(),android.os.Process.killProcess(android.os.Process.myPid());跟System.exit(0)
- activity调用finish方法理解
- Activity页面finish栈管理
- hbase0.90.4安装总结
- ISTQB AL-TM连载系列02:确定软件产品发布中的测试因素
- 百度map api for Android~搜索服务
- hibernate调用存储过程
- 堆和栈的区别 (转贴)
- finish、killProcess 使用必知_one App two Activity
- 高并发高流量网站架构
- 通过hibernate去调用存储过程
- 了解RO、RW、ZI和.text .bss .data
- cisco交换机配置
- 编程珠玑第四章-编写正确的程序
- Android之文件下载
- 技术爱好者Jeffrey Richter的一段话
- 做好职业规划