写了个socket测试程序,程序没有错,但atvitity却莫名其妙的老是崩溃,查找半天原来是以下问题,特此记录一下。
android.os.NetworkOnMainThreadException是指在主线程中访问网络,但android3.0版本开始就强制程序不能在主线程中访问网络,防止发生阻塞,所以要把访问网络放在独立的线程中。
在开发中,为了防止访问网络阻塞主线程,一般都要把访问网络放在独立线程中或者异步线程AsyncTask中。
1、想要忽略这些强制策略问题的话,可以在onCreate()方法里面加上
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
并在公共类上面加上@SuppressLint("NewApi"),就OK,测试时可以这样写,一般不建议这样写。
例如:
@SuppressLint("NewApi") //
public class MainActivity extends Activity {
EditText editText;
Button sendButton;
TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
editText = (EditText)findViewById(R.id.editText);
sendButton = (Button)findViewById(R.id.sendButton);
tv = (TextView)findViewById(R.id.tv);
...