この ProgressDialog を正しく動作させるために多くのことを試みましたが、まだ 100% ではありません。私は基本的に、最終目標にほぼ等しく近づく 2 つの別々の行き止まりに到達しました。
まずはエクストラThread
を作って使ってみましたrunOnUiThread
。これにより、ダイアログshowing
がdismissing
適切なタイミングで表示されますが、スピナーは回転しません。それは静止しており、調整することはありません。
readButton = (Button) findViewById( R.id.readButton );
readButton.setOnClickListener( new OnClickListener() {
public void onClick(View arg0) {
final ProgressDialog pd = new ProgressDialog( Waves.this );
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pd.setMessage("Reading...");
pd.setCancelable(false);
pd.show( );
Thread export = new Thread() {
public void run() {
if( myService.getState() != 3 ) {
runOnUiThread( new Runnable() {
public void run() {
Log.i( "myService", "12222" );
myService.setHandler( mHandler );
myService.connect( MainMenu.previousDevice, true );
}
});
} else {
runOnUiThread(new Runnable() {
public void run() {
readWaves();
}
});
}
mHandler.obtainMessage(MainMenu.READ_FINISHED ).sendToTarget();
pd.dismiss();
}
};
export.start();
}
});
私がやろうとした次のことは、AsyncTask
. 私がインターネット全体で見つけたものから、これが進むべき道のように見えます。スピナーが回転を開始し、コードが機能し始めますが、しばらくするとアプリケーションが現在のアクティビティから離れ、完全に再起動します。以下LogCat
に示しますが、エラーは表示されません。
readButton = (Button) findViewById( R.id.readButton );
readButton.setOnClickListener( new OnClickListener() {
public void onClick(View arg0) {
new readPage().execute( null, null, null );
}
});
public class readPage extends AsyncTask<Void, Void, Void> {
private ProgressDialog pdia;
@Override
protected void onPreExecute(){
super.onPreExecute();
pdia = new ProgressDialog( Waves.this);
pdia.setMessage("Reading...");
pdia.setCancelable( false );
pdia.show();
}
@Override
protected void onPostExecute(Void unused) {
pdia.dismiss();
}
@Override
protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
Log.i( "ASYNC", "2" );
if( myService.getState() != 3 ) {
myService.setHandler( mHandler );
myService.connect( MainMenu.previousDevice, true );
} else {
readWaves();
}
return null;
}
}
これがLogCat
です。LogCat
表示されている最初の行は、コードの一部であるの最後の行です。AsyncTask
これが実装されていないだけで、常に機能するため、この行で何が起こるかは確認していません。最後の行にはMain Menu ++ ON CREATE ++
、アプリケーションの再起動時のエントリがあります。
01-07 18:23:27.738: W/NATIVE CODE(28111): After SetBaud
01-07 18:23:29.777: I/dalvikvm(28111): threadid=4: reacting to signal 3
01-07 18:23:30.781: W/dalvikvm(28111): threadid=4: spin on suspend #1 threadid=9 (pcf=0)
01-07 18:23:30.781: D/dalvikvm(28111): Temporarily moving tid 28128 to fg (was 0)
01-07 18:23:30.781: D/dalvikvm(28111): Temporarily raised priority on tid 28128 (10 -> 0)
01-07 18:23:31.527: W/dalvikvm(28111): threadid=4: spin on suspend #2 threadid=9 (pcf=3)
01-07 18:23:31.531: I/dalvikvm(28111): "Signal Catcher" daemon prio=5 tid=4 RUNNABLE
01-07 18:23:31.531: I/dalvikvm(28111): | group="system" sCount=0 dsCount=0 obj=0x4050f730 self=0x117d60
01-07 18:23:31.531: I/dalvikvm(28111): | sysTid=28114 nice=0 sched=0/0 cgrp=default handle=582800
01-07 18:23:31.531: I/dalvikvm(28111): at dalvik.system.NativeStart.run(Native Method)
01-07 18:23:31.531: I/dalvikvm(28111): "AsyncTask #1" prio=5 tid=9 RUNNABLE
01-07 18:23:31.531: I/dalvikvm(28111): | group="main" sCount=1 dsCount=0 obj=0x40559388 self=0x2e1a10
01-07 18:23:31.531: I/dalvikvm(28111): | sysTid=28128 nice=0 sched=0/0 cgrp=default handle=3243272
01-07 18:23:31.925: I/dalvikvm(28111): at my.eti.commander.RelayAPIModel$NativeCalls.GetWavesJava(Native Method)
01-07 18:23:31.933: I/dalvikvm(28111): at my.eti.commander.Waves.readWaves(Waves.java:365)
01-07 18:23:31.937: I/dalvikvm(28111): at my.eti.commander.Waves.access$0(Waves.java:350)
01-07 18:23:31.941: I/dalvikvm(28111): at my.eti.commander.Waves$readPage.doInBackground(Waves.java:323)
01-07 18:23:31.945: I/dalvikvm(28111): at my.eti.commander.Waves$readPage.doInBackground(Waves.java:1)
01-07 18:23:31.949: I/dalvikvm(28111): at android.os.AsyncTask$2.call(AsyncTask.java:185)
01-07 18:23:31.957: I/dalvikvm(28111): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
01-07 18:23:31.960: I/dalvikvm(28111): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-07 18:23:31.964: I/dalvikvm(28111): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-07 18:23:31.968: I/dalvikvm(28111): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
01-07 18:23:31.972: I/dalvikvm(28111): at java.lang.Thread.run(Thread.java:1019)
01-07 18:23:32.734: W/dalvikvm(28111): threadid=4: spin on suspend #3 threadid=9 (pcf=3)
01-07 18:23:32.734: I/dalvikvm(28111): "Signal Catcher" daemon prio=5 tid=4 RUNNABLE
01-07 18:23:32.734: I/dalvikvm(28111): | group="system" sCount=0 dsCount=0 obj=0x4050f730 self=0x117d60
01-07 18:23:32.734: I/dalvikvm(28111): | sysTid=28114 nice=0 sched=0/0 cgrp=default handle=582800
01-07 18:23:32.734: I/dalvikvm(28111): at dalvik.system.NativeStart.run(Native Method)
01-07 18:23:32.734: I/dalvikvm(28111): "AsyncTask #1" prio=5 tid=9 RUNNABLE
01-07 18:23:32.734: I/dalvikvm(28111): | group="main" sCount=1 dsCount=0 obj=0x40559388 self=0x2e1a10
01-07 18:23:32.734: I/dalvikvm(28111): | sysTid=28128 nice=0 sched=0/0 cgrp=default handle=3243272
01-07 18:23:32.859: I/dalvikvm(28111): at my.eti.commander.RelayAPIModel$NativeCalls.GetWavesJava(Native Method)
01-07 18:23:32.859: I/dalvikvm(28111): at my.eti.commander.Waves.readWaves(Waves.java:365)
01-07 18:23:32.859: I/dalvikvm(28111): at my.eti.commander.Waves.access$0(Waves.java:350)
01-07 18:23:32.859: I/dalvikvm(28111): at my.eti.commander.Waves$readPage.doInBackground(Waves.java:323)
01-07 18:23:32.859: I/dalvikvm(28111): at my.eti.commander.Waves$readPage.doInBackground(Waves.java:1)
01-07 18:23:32.859: I/dalvikvm(28111): at android.os.AsyncTask$2.call(AsyncTask.java:185)
01-07 18:23:32.859: I/dalvikvm(28111): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
01-07 18:23:32.859: I/dalvikvm(28111): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-07 18:23:32.859: I/dalvikvm(28111): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-07 18:23:32.859: I/dalvikvm(28111): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
01-07 18:23:32.863: I/dalvikvm(28111): at java.lang.Thread.run(Thread.java:1019)
01-07 18:23:33.613: W/dalvikvm(28111): threadid=4: spin on suspend #4 threadid=9 (pcf=3)
01-07 18:23:33.613: I/dalvikvm(28111): "Signal Catcher" daemon prio=5 tid=4 RUNNABLE
01-07 18:23:33.613: I/dalvikvm(28111): | group="system" sCount=0 dsCount=0 obj=0x4050f730 self=0x117d60
01-07 18:23:33.613: I/dalvikvm(28111): | sysTid=28114 nice=0 sched=0/0 cgrp=default handle=582800
01-07 18:23:33.613: I/dalvikvm(28111): at dalvik.system.NativeStart.run(Native Method)
01-07 18:23:33.613: I/dalvikvm(28111): "AsyncTask #1" prio=5 tid=9 RUNNABLE
01-07 18:23:33.617: I/dalvikvm(28111): | group="main" sCount=1 dsCount=0 obj=0x40559388 self=0x2e1a10
01-07 18:23:33.617: I/dalvikvm(28111): | sysTid=28128 nice=0 sched=0/0 cgrp=default handle=3243272
01-07 18:23:33.617: I/dalvikvm(28111): at my.eti.commander.RelayAPIModel$NativeCalls.GetWavesJava(Native Method)
01-07 18:23:33.617: I/dalvikvm(28111): at my.eti.commander.Waves.readWaves(Waves.java:365)
01-07 18:23:33.617: I/dalvikvm(28111): at my.eti.commander.Waves.access$0(Waves.java:350)
01-07 18:23:33.617: I/dalvikvm(28111): at my.eti.commander.Waves$readPage.doInBackground(Waves.java:323)
01-07 18:23:33.617: I/dalvikvm(28111): at my.eti.commander.Waves$readPage.doInBackground(Waves.java:1)
01-07 18:23:33.617: I/dalvikvm(28111): at android.os.AsyncTask$2.call(AsyncTask.java:185)
01-07 18:23:33.617: I/dalvikvm(28111): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
01-07 18:23:33.617: I/dalvikvm(28111): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-07 18:23:33.617: I/dalvikvm(28111): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-07 18:23:33.617: I/dalvikvm(28111): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
01-07 18:23:33.617: I/dalvikvm(28111): at java.lang.Thread.run(Thread.java:1019)
01-07 18:23:34.367: W/dalvikvm(28111): threadid=4: spin on suspend #5 threadid=9 (pcf=3)
01-07 18:23:34.367: I/dalvikvm(28111): "Signal Catcher" daemon prio=5 tid=4 RUNNABLE
01-07 18:23:34.367: I/dalvikvm(28111): | group="system" sCount=0 dsCount=0 obj=0x4050f730 self=0x117d60
01-07 18:23:34.367: I/dalvikvm(28111): | sysTid=28114 nice=0 sched=0/0 cgrp=default handle=582800
01-07 18:23:34.371: I/dalvikvm(28111): at dalvik.system.NativeStart.run(Native Method)
01-07 18:23:34.371: I/dalvikvm(28111): "AsyncTask #1" prio=5 tid=9 RUNNABLE
01-07 18:23:34.371: I/dalvikvm(28111): | group="main" sCount=1 dsCount=0 obj=0x40559388 self=0x2e1a10
01-07 18:23:34.371: I/dalvikvm(28111): | sysTid=28128 nice=0 sched=0/0 cgrp=default handle=3243272
01-07 18:23:34.371: I/dalvikvm(28111): at my.eti.commander.RelayAPIModel$NativeCalls.GetWavesJava(Native Method)
01-07 18:23:34.371: I/dalvikvm(28111): at my.eti.commander.Waves.readWaves(Waves.java:365)
01-07 18:23:34.371: I/dalvikvm(28111): at my.eti.commander.Waves.access$0(Waves.java:350)
01-07 18:23:34.371: I/dalvikvm(28111): at my.eti.commander.Waves$readPage.doInBackground(Waves.java:323)
01-07 18:23:34.371: I/dalvikvm(28111): at my.eti.commander.Waves$readPage.doInBackground(Waves.java:1)
01-07 18:23:34.371: I/dalvikvm(28111): at android.os.AsyncTask$2.call(AsyncTask.java:185)
01-07 18:23:34.371: I/dalvikvm(28111): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
01-07 18:23:34.371: I/dalvikvm(28111): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-07 18:23:34.371: I/dalvikvm(28111): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-07 18:23:34.371: I/dalvikvm(28111): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
01-07 18:23:34.371: I/dalvikvm(28111): at java.lang.Thread.run(Thread.java:1019)
01-07 18:23:35.253: E/MainMenu(28151): +++ ON CREATE +++
編集:
.hide()
の代わりに使ってみたことも追加したいのです.dismiss()
が、それが問題だとは思いません。の新しいインスタンスをProgressDialog
使用するたびに作成します。