Android需要ping url onDestroy事件

时间:2015-11-10 22:16:18

标签: android

有没有办法在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

2 个答案:

答案 0 :(得分:0)

简单方法:

@Override
onDestroy(){
    new Thread(new Runnable() {

        @Override
        public void run() {
            ping();//your ping code here!

        }
    }).start();
    super.onDestroy();

}

答案 1 :(得分:0)

这很困难,因为您必须在后台运行网络请求(异步)。

因此,即使您安排网络请求在后台发生,它也可能/可能会失败,因为您随后销毁发送它的活动。

另一种方法可能是保存您要在文件上发送的消息(同步),然后在用户再次启动应用程序时触发它。

更复杂的方法可能是启动Service(可以在前台没有活动的情况下生存)并让它处理任何网络请求。

作为一个说明,我会避免通过服务进行大量工作,因为用户会注意到性能下降。