1

ユーザーが画像を押すのを待っているアクティビティがあります。ユーザーが 3 秒以内に何も押さない場合、アクティビティを閉じます (finish())。それは私のコードです:

private final int delay = 3000;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.after_hangup);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    final ImageView pressToLaunchbrowser = (ImageView) findViewById(R.id.after_hang_up_image);

    pressToLaunchbrowser.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);   // if we want to open the device.
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            startActivity(intent);
            Thread.interrupted();
        }
    }); 
    new Thread() {
        public void run() {
            try {
                    Thread.sleep(delay);
                    finish();
            }
            catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }.start();
}}

私の質問は、プレスが行われた場合、どうすればスレッドを起こすことができますか? 私は試しThread.interrupted();ましたが、うまくいきません。押すかどうかにかかわらず、スレッドはまだ3秒間待機します。ありがとう!

4

2 に答える 2

3

Android でスレッドを使用することはお勧めしません。時間依存の操作を管理するために Handler を使用します。たとえば、代わりにnew Thread()..、試してください

Handler handler = new Handler();
handler.postDelayed('runnable-that-will-finish-activity', 3000);

そしてonclicklistenerで:

handler.remove('runnable-that-will-finish-activity') ;
于 2012-08-01T09:50:34.997 に答える
1
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.ImageView;

public class NewActivity extends Activity {

    private final int delay = 3000;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.after_hangup);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        final ImageView pressToLaunchbrowser = (ImageView) findViewById(R.id.after_hang_up_image);

        final Handler handler = new Handler();
        handler.postDelayed(finishRunnable, delay);
        pressToLaunchbrowser.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
                // // if we want to open the device.
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse(url));
                startActivity(intent);
                handler.removeCallbacks(finishRunnable);
            }
        });

    }

    private Runnable finishRunnable = new Runnable() {

        @Override
        public void run() {
            finish();

        }
    };
}
于 2012-08-01T10:14:28.420 に答える