2

ICS 4.0.3 でのスレッドの実行に問題があります

APK を作成し、2.33 SE 電話と Google Nexus S 4.0.3 の両方にインストールしました。

SEでは、apkが実行され、想定どおりにロードされています。ただし、Nexus ではエラーが発生し、閉じる必要があります。しかし、プログラムが背後で実行されているのがわかります。コードからスレッド(ロード画面、スプラッシュ画像)を削除して、Nexusで再度実行しようとしましたが、実行できました。だから、私の問題はスレッド、onCreate スレッドの開始にあることがわかりました。2.33 から 4.0.3 への何らかの違いはありますか?

package my.LigTv.Browser;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.webkit.WebView;
import android.app.AlertDialog;
public class LigTVBrowserActivity extends Activity {
/** Called when the activity is first created. */


WebView mWebView;
AlertDialog alertDialog;
protected boolean _active = true;
protected int _splashTime = 3000; // time to display the splash screen in ms
int progress = 0;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);



    final Activity activity = this;

    final ProgressDialog progressDialog = new ProgressDialog(activity);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progressDialog.setMessage("Please wait for the applet to load");

    progressDialog.show();
    progressDialog.setProgress(0);
    activity.setProgress(progress * 1000);

    progressDialog.incrementProgressBy(progress);

    if(progress == 100 && progressDialog.isShowing())
        progressDialog.dismiss(); 



    Thread splashTread = new Thread() {
        @Override
        public void run() {                 
            try {
                int waited = 0;
                while(_active && (waited < _splashTime)) {
                    sleep(100);

                    if(_active) {
                        waited += 100;                                                    
                        }
                }
            } catch(InterruptedException e) {
                // do nothing
            } finally {
                finish();
                startActivity(new Intent("my.LigTv.Browser.Starter"));
                stop();
            }
        }
    };
    splashTread.start();
}    

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        _active = false;
    }
    return true;
}

 }
4

3 に答える 3

1

私は同じ問題に遭遇しました、私はクイックフィックスとして別のコードでそれを修正しました:

private Timer myTimer;
private int x=0;
private int interval=2500;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

    myTimer = new Timer();
    myTimer.schedule(new TimerTask() {
        @Override
        public void run() {
            TimerMethod();
        }

    }, 0, interval);

}

private void TimerMethod()
{
    this.runOnUiThread(Timer_Tick);
}

private Runnable Timer_Tick = new Runnable() {
public void run() {
    if(x==1)
    {
        SplashActivity.this.finish();
        startActivity(new Intent(SplashActivity.this,LoginActivity.class));
    }
    x++;
}
};

しかし、プログレスバーがなければ、

ユーザーがスプラッシュ画面をクリックしたときに次のアクティビティに移動する場合は、タイマーをキャンセルしてスプラッシュアクティビティを終了し、他のアクティビティに移動します。

于 2012-04-24T12:01:37.130 に答える
1

finish()新しいアクティビティを開始してから呼び出してみてください。また、なぜstop()スレッドで呼び出しているのですか? 新しいアクティビティを開始すると、停止します。これは私がすでに書いた例です。必要に応じて変更してください。

            Runnable r1 = new Runnable(){
                public void run(){
                    new Handler().postDelayed(new Runnable(){
                        @Override
                        public void run(){
                            startActivity(new Intent(Splash.this,Main.class));
                            overridePendingTransition(R.anim.fade_out, R.anim.fade_in);
                            finish();

                        }
                    }, waitTime);
                }
            };
            runOnUiThread(r1);
于 2012-04-24T11:33:47.197 に答える
0

これはUIスレッドにあるべきではありません..

     runOnUiThread(new Runnable(){
                finish();
                startActivity(new Intent("my.LigTv.Browser.Starter"));
                stop();
});
于 2012-04-24T11:32:20.270 に答える