我的问题是...... 我有2个活动.. onCreate和Onclick。我有一个在onCreate里面运行的线程,我必须在onClick里面停止它。这可能吗? 如果是,请向我提供一些提示/代码片段如何实现这一点。
我在onCreate事件中的代码是: -
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen);
button = (Button) findViewById(R.id.btn);
button.setOnClickListener(this);
try{
bright = Settings.System.getInt(getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS);
}catch(Exception ex){
ex.printStackTrace();
bright = 1.0f;
}
lp = getWindow().getAttributes();
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(10000);
mHandler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
lp.screenBrightness= dim;
getWindow().setAttributes(lp);
// SLEEP 2 SECONDS HERE ...
final Handler handler = new Handler();
Timer t = new Timer();
t.schedule(new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
lp.screenBrightness=bright;
getWindow().setAttributes(lp);
}
});
}
}, 2000);
}
});
} catch (Exception e) {
// TODO: handle exception
}
}
}
}).start();
}
此活动在循环内运行。我想停止这一点,我点击按钮。看来我无法在按钮onclick事件中调用Thread.interrupt()方法。我该如何处理?
答案 0 :(得分:1)
如果您创建了引用,则可以从类中的任何位置访问它。所以,在课堂上的广告中就像是
Thread thrd
就像你使用Button,TextView或其他任何东西一样。然后在onCreate方法中添加像
这样的引用thrd = new Thread(new Runnable(){
现在您可以参考您的课程中可以使用的线程。
答案 1 :(得分:1)
在你的类中声明boolean
mRunnning
,这就像一个标志,自定义运行的线程将依赖于它来知道它是否已被取消。
像往常一样,你的帖子中有一个循环,而不是while(true)
做while(mRunning)
。
此外,你正在让你的线程休眠,在睡眠期间,线程将无法检查mRunning
变量,你将不得不在线程对象上调用interrupt()
来使它成为停止。
最好使用变量来保存线程引用Thread t = new Thread(....
所以,现在要停止你的主题,你必须拨打mRunning = false
然后t.interrupt()
。
答案 2 :(得分:1)
根据您目前的情况根据之前的答案评论。你想尝试:
myThread = new Thread(new Runnable
正确?
然后你也应该删除以前编码的.start();
部分。然后写:
myThread.start();
你应该在你的班级中将myThread
声明为全局,这样你就可以从班级的任何地方访问这个帖子。现在你可以在onClick
你应该把这个答案和User117
的答案结合在一起。
答案 3 :(得分:0)
而不是
而(真)
在run()方法中,将boolean变量声明为true并在onClick之后更改它。例如:
private boolean shouldRun = true;
然后在run()方法中:
@Override
public void run() {
// TODO Auto-generated method stub
while (shouldRun==true) {
.
.
.
并在你的onClick:
@override
public void OnClick(View v){
shouldRun=false;
.
.
.