如何在Android上保存AsyncTask的实例状态
我的程序使用tcpdump命令记录网络流量,_initTask执行tcpdump命令。
当我退出应用程序时,我丢失了对象 _initTask,
返回应用程序后,我无法到达 _initTask 对象来停止任务。
如何保存_initTask实例状态?
protected InitTask _initTask;
public void OnClickRecord(View view) throws IOException {
....
Log.e("AndroLoad class::OnClickRecord", "AsyncTask will start");
_initTask = new InitTask();
_initTask.execute(this);
} else {
....
}
}
我可以使用 onSaveInstanceState(Bundle)
或 OnPause()
来做到这一点吗?如果是,请举例。
My program record network traffic by using tcpdump command, _initTask execute the tcpdump command.
I lose the object _initTask when I exit the application,
after back to the application I am not able to reach _initTask object to be able to stop the task.
How to save _initTask instance state?
protected InitTask _initTask;
public void OnClickRecord(View view) throws IOException {
....
Log.e("AndroLoad class::OnClickRecord", "AsyncTask will start");
_initTask = new InitTask();
_initTask.execute(this);
} else {
....
}
}
Could I do that with onSaveInstanceState(Bundle)
or OnPause()
? if yes, please provide an example.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Android 不太适合运行命令行程序。
为什么?
tcpdump
是一个命令。它在自己的进程中运行。它将无限期地运行,或者直到捕获到指定数量的数据包,或者直到您向它发送 SIGINT 或 SIGKILL。在这种情况下,AsyncTask
没有任何意义。当然。您应该在派生该进程的任何组件的
onDestroy()
中停止tcpdump
。你不知道。您应该在派生该进程的任何组件的
onDestroy()
中停止tcpdump
。Android is not well-suited for running command-line programs.
Why?
tcpdump
is a command. It runs in its own process. It will run indefinitely, or until a specified number of packets are caught, or until you send a SIGINT or SIGKILL to it. AnAsyncTask
makes no sense in this scenario.Of course. You should be stopping
tcpdump
inonDestroy()
of whatever component forked that process.You don't. You should be stopping
tcpdump
inonDestroy()
of whatever component forked that process.