有没有办法在Activity onDestroy事件上ping一个url。我曾尝试使用AsyncTask,因为一些教程说它将在onDestroy之后执行,但它不起作用。
这是我在破坏
上的类public class inactive extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
String res = new String();
try {
BufferedReader reader = null;
URLConnection uc = null;
try {
URL urll = new URL(new StringBuilder()
.append("www.myuru.com").toString());
uc = urll.openConnection();
uc.connect();
reader = new BufferedReader(new InputStreamReader(uc.getInputStream()));
StringBuffer buffer = new StringBuffer();
int read;
char[] chars = new char[1024];
while ((read = reader.read(chars)) != -1)
buffer.append(chars, 0, read);
res = buffer.toString();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
reader.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
}
}
这是我活动中的onDestroy方法
@Override
protected void onDestroy() {
new inactive(this, sharedpreferences).execute();
super.onDestroy();
}
我的测试显示该代码在尝试打开连接时会中断(urll.openConnection())。
我尝试过线程,异步任务,并使用多种方法同步调用url:URLConnection,HttpGet
答案 0 :(得分:0)
简单方法:
@Override
onDestroy(){
new Thread(new Runnable() {
@Override
public void run() {
ping();//your ping code here!
}
}).start();
super.onDestroy();
}
答案 1 :(得分:0)
这很困难,因为您必须在后台运行网络请求(异步)。
因此,即使您安排网络请求在后台发生,它也可能/可能会失败,因为您随后销毁发送它的活动。
另一种方法可能是保存您要在文件上发送的消息(同步),然后在用户再次启动应用程序时触发它。
更复杂的方法可能是启动Service(可以在前台没有活动的情况下生存)并让它处理任何网络请求。
作为一个说明,我会避免通过服务进行大量工作,因为用户会注意到性能下降。