[英]Thread runs only one time
這是我的代碼。
public void showCallFragment(){
address_phone = new ArrayList<>();
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
OyumDataBaseHelper dbh = new OyumDataBaseHelper(Address_Activity.this);
dbh.OpenDatabase();
for (int i = 0; i < addressIds.size(); i++) {
Cursor cr1 = dbh.getPhone(addressIds.get(i));
cr1.moveToFirst();
ArrayList<String> phoneList = new ArrayList<>();
do {
phoneList.add(cr1.getString(cr1.getColumnIndex(TableData.TableInfo.ph_phone_number)));
} while (cr1.moveToNext());
address_phone.add(phoneList);
cr1.close();
}
}
});
thread1.start();
}
從OnCreate(Bundle)方法中調用此函數。 我在活動中使用一個列表視圖,每個列表視圖在其onClick函數上打開一個dialogFragment。 問題是,當我返回上一個活動並打開我的listview活動時,這次他們的onClick函數出現錯誤。 函數showDialogFragment()運行,但是線程根本不起作用!
請記住:
1)當您轉到上一個活動時,將調用onResume()方法(而不是再次在其中啟動您的方法的onCreate()方法)。 因此該功能不會再次啟動。
2)線程與主線程不匹配,主線程是調節活動生命周期的主線程。 這意味着啟動的線程繼續其循環,直到完成所有執行,然后停止。 它的生命周期不取決於各種活動之一。
所以我認為線程停止了,當您返回時,它不會再次啟動。
您可以嘗試這樣做,希望對您有所幫助。
Thread thread1 = new Thread() {
public void run() {
try {
runOnUiThread(new Runnable() {
@Override
public void run() {
//your code here
}
});
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
}
};
thread1.start();
在您所處的環境中使用線程不是最佳實踐。 相反,您可以使用一個簡單的AsyncTask: https : //developer.android.com/reference/android/os/AsyncTask.html
static class GrabAddressesTask extends AsyncTask<SQLiteOpenHelper,Void, List<String>>{
@Override
protected List<String> doInBackground(SQLiteOpenHelper... params) {
final List<String> addresses=new ArrayList<>();
final SQLiteDatabase db=params[0].getReadableDatabase();
try{
// get your addresses here and update the List
}
finally {
db.close();
}
return addresses;
}
@Override
protected void onPostExecute(List<String> stringList) {
super.onPostExecute(stringList);
// update your UI in here
// make sure you do not keep a strong reference to you Activity/Fragment in this class
// if you need a reference just use a WeakReference
}
}
以及使用方式:
new GrabAddressesTask().execute(sqlOpenHelper);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.