- 酷的飞上天空
- 等级: 初级会员
- 性别:
- 文章: 17
- 积分: 40
- 来自: 无锡
|
代码如下:
package com.example;
import java.net.HttpURLConnection;
import java.net.URL;
import android.os.Bundle;
import android.util.Log;
import android.app.Activity;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
URL uri = new URL("http://www.baidu.com/");
HttpURLConnection conn = (HttpURLConnection)uri.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
Log.i("MainActivity", "start connection");
conn.connect();
Log.i("MainActivity", "end connection");
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
只有第一次启动时会出现这种情况。第一次启动是指:在程序管理里面强制结束程序进程后,启动应用。如果不强制结束进程,则退出再启动时就是很快就有返回结果。
同样的代码在普通的java程序里面就没有这个问题,不知道是不是在系统底层做了什么修改。
- 大小: 32.3 KB
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
返回顶楼 |
|
|
- pgq102040818
- 等级: 初级会员
- 文章: 1
- 积分: 30
|
android调用disconnect方法socket没有断开的。
|
返回顶楼 |
|
|
- 酷的飞上天空
- 等级: 初级会员
- 性别:
- 文章: 17
- 积分: 40
- 来自: 无锡
|
pgq102040818 写道 android调用disconnect方法socket没有断开的。
如何才能提高第一次调用时的速度呢
|
返回顶楼 |
|
|
- 须等待
- 等级: 初级会员
- 性别:
- 文章: 102
- 积分: 70
- 来自: 深圳
|
你连Activity的声明周期都没有搞清楚
onCreate是进程被创建的时候才调用,你退出也好,怎么样也好,只要进程没被干掉,你再进来这个方法都不会被调用。
还有,在主线程里建立网络连接是客户端设计里最避讳的一件事情,你应该把这个操作移到其他的线程里
|
返回顶楼 |
|
|
- 酷的飞上天空
- 等级: 初级会员
- 性别:
- 文章: 17
- 积分: 40
- 来自: 无锡
|
须等待 写道 你连Activity的声明周期都没有搞清楚
onCreate是进程被创建的时候才调用,你退出也好,怎么样也好,只要进程没被干掉,你再进来这个方法都不会被调用。
还有,在主线程里建立网络连接是客户端设计里最避讳的一件事情,你应该把这个操作移到其他的线程里
1.按返回键推出然后再进入时会再次调用onCreate方法,这个是符合Activity生命周期的。
2.上面的例子只是一个简单的测试,是为了说明问题。真正的项目里面自然不会放到主线程去做网络请求。
关于:onCreate是进程被创建的时候才调用,你退出也好,怎么样也好,只要进程没被干掉,你再进来这个方法都不会被调用。
请经过测试后再下结论。
|
返回顶楼 |
|
|
- 须等待
- 等级: 初级会员
- 性别:
- 文章: 102
- 积分: 70
- 来自: 深圳
|
酷的飞上天空 写道 须等待 写道 你连Activity的声明周期都没有搞清楚
onCreate是进程被创建的时候才调用,你退出也好,怎么样也好,只要进程没被干掉,你再进来这个方法都不会被调用。
还有,在主线程里建立网络连接是客户端设计里最避讳的一件事情,你应该把这个操作移到其他的线程里
1.按返回键推出然后再进入时会再次调用onCreate方法,这个是符合Activity生命周期的。
2.上面的例子只是一个简单的测试,是为了说明问题。真正的项目里面自然不会放到主线程去做网络请求。
关于:onCreate是进程被创建的时候才调用,你退出也好,怎么样也好,只要进程没被干掉,你再进来这个方法都不会被调用。
请经过测试后再下结论。
如果你是进程的最后一个Activity那是退出就没了,如果不是,有一个创建模型,默认是不会创建新的,因为你以前的对象会被缓存
|
返回顶楼 |
|
|
- 酷的飞上天空
- 等级: 初级会员
- 性别:
- 文章: 17
- 积分: 40
- 来自: 无锡
|
须等待 写道 如果你是进程的最后一个Activity那是退出就没了,如果不是,有一个创建模型,默认是不会创建新的,因为你以前的对象会被缓存
确实是进程的最后一个Activity,因为是新建了一个Android项目来测试这个问题,里面只有上面的一个Activity。
貌似有点偏离主题了,我想问的是第一次请求网络时遇到的阻塞问题是什么原因,怎么才能避免或者减少阻塞的时间。
|
返回顶楼 |
|
|
- 须等待
- 等级: 初级会员
- 性别:
- 文章: 102
- 积分: 70
- 来自: 深圳
|
酷的飞上天空 写道 须等待 写道 如果你是进程的最后一个Activity那是退出就没了,如果不是,有一个创建模型,默认是不会创建新的,因为你以前的对象会被缓存
确实是进程的最后一个Activity,因为是新建了一个Android项目来测试这个问题,里面只有上面的一个Activity。
貌似有点偏离主题了,我想问的是第一次请求网络时遇到的阻塞问题是什么原因,怎么才能避免或者减少阻塞的时间。
你这个5秒应该是超时的时间,我开始没仔细看你的代码,你可以在adb shell环境里尝试ping baidu.com来测试网络连接是不是通的
|
返回顶楼 |
|
|
- u010991855
- 等级: 初级会员
- 文章: 1
- 积分: 30
|
android4.0之后的网络交互是不可以放到UI线程的 写一个异步任务就可以了
|
返回顶楼 |
|
|