我有一个“长期运行的”清理行动,我需要执行onDestroy()
我的Activity
。做这个的最好方式是什么?
如果我使用a
Thread
这样做,我onDestroy()
将立即返回;但是线程引用发生了什么?我正在寻找有关此处需要了解的任何影响/陷阱/绊网的建议,因为我认为即使活动被销毁,该流程仍将继续存在。
我在我的应用程序中使用JmDNS。当用户使用完我的应用程序后,我想清理JmDNS实例。我使用类close()
方法进行此操作JmDNS
。但是,此方法需要
5秒钟以上 才能完成。结果,用户Activity
在触摸“返回”键后在很长一段时间内看到了我的屏幕。
我还没有弄清楚为什么close()
花那么长的时间,但是与此同时,我也意识到我真的不需要等待收盘成功完成。我需要的是一种“触发”关闭并完成操作的方法。
我最终完成了我在问题中提出的要求-我开始在Thread
中执行长期运行的操作onDestroy()
。
我必须考虑的一种情况是,即使在长时间运行之前,用户仍重新打开我的应用程序。在我的应用程序中,这意味着将创建一个新的JmDNS实例。因此,我分别在中清理每个实例onDestroy
。
您的用例可能有所不同-您可能只想在清理线程尚未运行时启动它(使用Thread
的isAlive()
方法或某种类似的技术)。
这是一些示例代码。要欣赏“分别清理每个实例”部分,请执行以下步骤序列:
public class DelayedExitActivity extends Activity {
private static final String LOG_TAG = "DelayedExit";
private final Runnable longOperation = new Runnable(){
@Override
public void run() {
for (int i=0 ; i < 50; i++){
Log.d(LOG_TAG, "Iteration "+i);
try {
Thread.sleep(2 * 1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
private Thread longThread ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected void onDestroy() {
if(longThread == null){
longThread = new Thread(longOperation);
}
longThread.start();
super.onDestroy();
}
}
问题内容: 我正在用node.js编写游戏服务器,某些操作涉及服务器部分的大量计算。在运行这些计算时,我不想停止接受连接- 当node.js不支持线程时,如何在后台运行它们? 问题答案: 我个人不能保证任何一种,但是如果您热衷于进行工作,那么节点模块页面上列出了针对节点的WebWorkers API的几个独立实现。 : http://github.com/cramforce/node-worker
我目前使用的是mysql 我有两个名为person和zim_list_id的表,这两个表都有超过200万行
问题内容: 我有一个运行长时间运行的作业的Web服务(大约几个小时)。我正在使用Flask,Gunicorn和nginx进行开发。 我正在考虑做的事情是拥有一条需要很长时间才能完成的路由,调用一个创建线程的函数。然后,该函数将向路径返回一个GUID,并且路径将返回一个URL(使用GUID),用户可以使用该URL来检查进度。我正在将线程设为守护程序(thread.daemon = True),以便如
问题内容: 我有一个用JAX- RS实现的REST服务。有些操作需要很长时间才能完成,可能需要15到30分钟。对于这些情况,我倾向于派遣一个后台线程来处理长时间运行的操作,然后立即以HTTP状态202 ACCEPTED进行响应。响应将包含一个带有URL的位置标头,客户端可使用该标头来轮询进度。 这种方法需要创建线程来处理长时间运行的操作,以便可以立即返回202 ACCEPTED。我也知道在Java
问题内容: 我有一个http服务器(使用启动),我想做一些操作。 我该怎么做(在Linux上)?在ctrl-C的情况下可以进行那些操作吗? 我不熟悉Unix信号,因此答案可能很简单。 问题答案: 您可以使用信号包订购TERM和INT信号。但是请注意,只有在明确终止进程时才发送这些信号。正常退出(由流程本身启动)不涉及任何信号。我认为,对于正常退出,只需在主例程中执行某些操作即可(该例程应该生成工作
每个人在最新的更新之后,Studio在运行应用程序之前已经运行了很长时间(3-40分钟)“运行Gradle Build”。如何治疗?当前Studio版本:1.3。2.