概述
多线程虽说很方便,但是如果使用不当就会导致很多问题,比如下面这个例子:
package com.example.anrtest;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private byte[] lock = new byte[1];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showSth();
showSth();
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showToast();
}
});
}
private void showSth() {
new Thread(new Runnable() {
@Override
public void run() {
synchronized (lock) {
while (true) {
Log.e("H3c", "show:" + Thread.currentThread().getId());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}).start();
}
private void showToast() {
synchronized (lock) {
Toast.makeText(this, "click", 100).show();
}
}
}
为了等待线程执行结果,点击按钮的时候在UI线程加了一个同步锁,这样其实无异于没有使用线程。
所以新手需要注意的是,千万不要在UI线程中加同步锁!否则很容易ANR!
最后
以上就是忐忑烧鹅为你收集整理的【警惕】synchronized导致的Android ANR的全部内容,希望文章能够帮你解决【警惕】synchronized导致的Android ANR所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复