Button不适用于新线程

时间:2017-12-12 15:44:18

标签: android android-layout android-button android-thread

以前我有错误 - 关于某个循环,我已经看到信息,在这种情况下有必要为按钮启动一个新线程,但仍然没有任何反应,思想日志现在没有显示错误。

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
    private static final int CAPTURE = 9003;
    Button button;
    Context context;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.capture);
        button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                runOnUiThread(new Runnable() {
                    public void run() {
                        Toast.makeText(context, "BUTTON clicked", Toast.LENGTH_LONG).show();
                        Log.d("BUTTON","CLICKED");
                    }
                });
            }
        });
        Intent intent = new Intent(this, CaptureActivity.class);
        intent.putExtra(CaptureActivity.AutoFocus, true);
        startActivityForResult(intent, CAPTURE);
    }
}

1 个答案:

答案 0 :(得分:1)

runOnUiThread表示您告诉UI线程执行传递的Runnable as指令,因此它不会创建新线程。

解决方案:我假设您的此代码仅用于演示以进行线程和UI更新,因此最好的选择之一是AsyncTask

并删除runOnUiThread功能,不需要它

您需要删除此代码或在运行方法

中移动它
Intent intent = new Intent(this, CaptureActivity.class);
intent.putExtra(CaptureActivity.AutoFocus, true);
startActivityForResult(intent, CAPTURE);

因为您目前位于CaptureActivity而不是MainActivityOnCreate将直接带您到CaptureActivity您希望MainActivity代码运行的地方(可能是相同的用户界面)