因此,我在Android項目中遇到了線程問題。我有一個ThreadStarter類,它帶有一個BuildScreen()函數,它實際上爲每個活動創建佈局。唯一的問題是,有時線程不會啓動,我不知道爲什麼。儘管他們的工作時間爲98%,但如果他們不這樣做,目前的活動將永遠不會起作用,用戶必須重新啓動應用程序,這是不方便的。Android線程有時無法啓動
這裏是我的代碼片段:
public class ThreadStarter
{
public static void BuildScreen()
{
try
{
GlobalVariables.screenDrawer.onStart();
GlobalVariables.listInitaliser.onStart();
Logger.log("ThreadStarter.BuildScreen", "Threads started");
}
catch(IllegalThreadStateException e)
{
GlobalVariables.screenDrawer.StopThread();
GlobalVariables.listInitaliser.StopThread();
Logger.log("ThreadStarter.BuildScreen", "Threads stopped");
GlobalVariables.screenDrawer.onStart();
GlobalVariables.listInitaliser.onStart();
}
catch(Exception e)
{
Logger.Error("Couldn't stop or start the threads!");
Logger.Error("Exception() Message: " + e.getMessage());
}
}
}
螺紋:
public class ListInitialiser extends Thread
{
private static ListInitialiser _thread;
public synchronized void run()
{
GlobalVariables.CurrentActivity.UpdateLists();
}
public void onStart()
{
_thread = new ListInitialiser();
_thread.start();
}
public void StopThread()
{
if (_thread != null)
{
_thread.interrupt();
_thread = null;
}
}
}
我不會在這裏插入ScreenDrawer線程,因爲這幾乎是一樣的,只不過它調用另一個功能。
這是怎麼每次活動創建(當然內容查看每個文件不同):
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().getAttributes().windowAnimations = R.style.Fade;
setContentView(R.layout.activity_fine_data_3);
GlobalVariables.CurrentActivity = this;
ThreadStarter.BuildScreen();
Logger.log("INFORMATION", "Person3DataActivity (Information 3/5)");
}
在GlobalVariables部分,我有這些變量:
public static ScreenDrawer screenDrawer = new ScreenDrawer();
public static ListInitialiser listInitaliser = new ListInitialiser();
如果任何人有解決方案或想法,請與我分享。 在此先感謝。
編輯:好的,所以我把ONOF的(相當嚴厲,但有用的:))的意見,並重構我的代碼使用的AsyncTask代替。它似乎工作得很好。我設法將它實現到我的AbstractActivity類中,該類是我使用的每個Activity的父項,現在我所要做的就是在每個onCreate方法中調用BuildScreen()方法。
感謝大家的回覆。
那樣的做法似乎很奇怪,我。爲什麼你需要這樣初始化你的活動? –
我有很多活動,我不得不找到一個標準的解決方案來初始化它們,而不用重複我的大部分代碼。這似乎工作得很好。另外,我的一些活動需要使用大量資源(如圖片),因此我需要在後臺加載它們,以保持GUI的響應。 – Rockbag
什麼不是初始化?您的活動或其從未去過ListInitialiser類? – sheetal