android線程超時
A. android 開機log報錯 Activity idle timeout for HistoryRecord主要由哪些問題引起的
開機報錯 Activity idle timeout for HistoryRecord,
含義:開機時從啟動一個Activity到其內容被顯示出來,已經超出了時間限制。
原因:主線程的Activity超時運行,做了耗時較多的工作,需要將這些工作放置在另一個新線程中操作
耗時較多的部分,只能仔細查看下代碼了
B. Android 如何解決資料庫多線程鎖的問題
多線程是很容易造成死鎖,一般情況下死鎖都是因為並發操作引起的。我不懂java,但死鎖這個問題每種開發工具和資料庫都會碰到.解決辦法是:
1、程序方面優化演算法(如有序資源分配法、銀行演算法等),在一個程序里,能不用多線程更新同一張資料庫表 盡量不要用,如果要用,其避免死鎖的演算法就很復雜。
2、資料庫方面設置等待超時時間
3、發生死鎖後直接KILL掉資料庫進程
C. java 開發Android的APP,開啟線程讀取數據,一但網路中斷,APP便停止運行,請問如何解決
是這樣的,你在線程中讀取網路數據,如果網路中斷了,就會拋出一系列的異常
這時候,你就要捕獲這些異常做不同的提示
以下是一些網路連接中常見的異常
//處理網路異常
publicStringExceptionCode(Exceptione){
if(einstanceofHttpException){
returncontext.getString(R.string.networkFailure);//網路異常
}elseif(){
returncontext.getString(R.string.responseTimeout);//響應超時
}elseif(){
returncontext.getString(R.string.requestTimeout);//請求超時
}elseif(einstanceofIOException){
returncontext.getString(R.string.networkError); //網路異常
}elseif(einstanceofJSONException){
returncontext.getString(R.string.json_error); //json格式轉換異常
}else{
returncontext.getString(R.string.canNotGetConnected);//無法連接網路
}
}
已經封裝好了,你直接調用就好了
D. Android等待線程返回結果
樓主,不知道我說的對不對,如果有問題,可以進一步交流
首先在onCreate使用匿名類做子線程是不行的,如果下載時間過長onCreate是主線程,阻塞時間過長會出現ANR(超時)錯誤
如果要在onCreate上開啟線程,需要使用Timer
我個人建議是在onCreate中開啟Timer在TimerTask的run方法裡面開啟匿名線程或者直接就在TimerTask的run方法裡面下載,下載完畢後,使用Handler接收消息再執行System.out.println(str);
E. Android怎麼結束一個線程
在Java語言中,安全結束線程的方法就是「讓線程的自身流程執行完」。
出現「僵屍線程」的原因:1.線程在死循環中執行。2.線程阻塞。
很明顯,你的ReadHandlerThread線程發生了線程阻塞。
dis.readFully(b),你在這里調用了一個阻塞方法,由於socket的另一端一直沒有發送數據,ReadHandlerThread線程一直阻塞在了這里,等待接收完136位元組的數據。136位元組沒有接收完,readFully方法將一直處於阻塞狀態。
解決方法,設置socket的等待超時值,而不是無限等待。
F. android中開線程延時問題
我想做到的效果是屏幕中畫一個圓,然後圓會慢慢變小,當半徑變成1時停止變小。然後每觸摸一次屏幕圓半徑會增大,直到半徑到100停止。我把這兩個寫在了兩個線程里,但是目前運行下來觸摸屏放大圓可以,但是圓自己慢慢變小卻不行。
MainActivity.java 重要 代碼
public class MainActivity extends Activity{
private Thread thread1;
private Thread thread2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final FrameLayout frame=new FrameLayout(this);
setContentView(frame);
frame.findViewById(R.id.framelayout1);
final MyView view=new MyView(this);
thread1=new Thread(new Runnable(){
@Override
public void run(){
view.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v,MotionEvent event){
++view.r;
view.invalidate();
return true;
}
});
}
});
thread2=new Thread(new Runnable(){
@Override
public void run(){
--view.r;
view.invalidate();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
thread1.start();
thread2.start();
frame.addView(view);
if (view.r==1)
{
thread2.interrupt();
}
if (view.r==100){
thread1.interrupt();
}
}
}
class MyView extends View{
int r=10,x,y;
public MyView(Context context){
super(context);
x=context.getResources().getDisplayMetrics().widthPixels/2;
y=context.getResources().getDisplayMetrics().heightPixels/2;
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
Paint paint=new Paint();
paint.setAntiAlias(true);
paint.setStrokeWidth(3);
paint.setStyle(Style.STROKE);
paint.setColor(Color.BLUE);
canvas.drawCircle(x,y,r,paint);
}
}
G. Android的App中線程池的使用,具體使用多少個線程池
這個需要根據實際情況來確定的,一般來說根據模塊的功能和優先順序來區分,比如你一些必須載入的如用戶登錄就不要和圖片載入的用同一個線程池,當然這種情況比較少見,用戶和伺服器配置數據的應該單獨用一個線程池,下載模塊應該獨立一個,其它數據展示的用一個,曾經就出現過APP啟動的時候請求的線程過多導致用戶登錄線程一直排不上超時的情況