3

終了時に何かを行う必要があるアクティビティAがあります-データベースにデータを保存します-アクティビティBを開始します

保存には時間がかかることがあるので、ユーザーがアクティビティBのコンテンツを読み取るのに忙しいときに、データベースアクセスをバックグラウンドで実行するために新しいスレッドを開始する必要があります(Bは保存されたデータを使用しません)。

だから私はアクティビティAにいます

 FinishStuff(){
 Intent ourIntent = new Intent(this, ActivityB.class);
 startActivity(ourIntent);

 handler = new Handler();
 handler.post(dbSaver);
}
 public Runnable dbSaver = new Runnable() {

 @Override
 public void run() {
     saveToDbs();
 }

ただし、アクティビティBのOnCreate()がすぐに呼び出されますが、新しいアクティビティを配置する画面スペースは、saveToDBs()が終了するまで黒くなり、アクティビティBが表示されます。これを解決する方法はありますか?TIA

4

2 に答える 2

1

あなたはによって間違えHandlerましたThread

スレッドは、別のHandlerスレッドでコードの一部を実行するために使用できます(つまり、UIの更新、進行状況の通知など)。必要なのは新しいスレッドです。

したがって、次のものを置き換える必要があります。

handler = new Handler();
handler.post(dbSaver);

に:

new Thread(dbSaver).start();

よろしく。

于 2012-10-29T17:16:33.633 に答える
0

ただし、データベースアクセスをバックグラウンドで実行するには、新しいスレッドを開始する必要があります。

正しい。ただし、上記のコードで新しいスレッドを開始しているわけではありません。

于 2012-10-29T15:02:01.273 に答える