嗨我正在制作自定义吐司,我能够做到这一点,但是当我移动到下一个活动后,线程正在运行或激活后台活动,那么我应该怎样做才能删除该线程或停止此线程
我的代码如下:
public void customToast(int x, int y, String str) {
if (Util.tipson == true) {
toast = new Toast(getApplicationContext());
toast.setDuration(Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP, x, y);
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
toastView = li.inflate(R.layout.toastlayout, null);
toast.setView(toastView);
TextView text = (TextView) toastView.findViewById(R.id.text);
text.setText(str);
// toast.show();
fireLongToast();
}
}
private void fireLongToast() {
t = new Thread() {
public void run() {
int count = 0;
try {
while (true && count < 40) {
try {
toast.show();
sleep(100);
count++;
} catch (Exception e) {
// TODO: handle exception
}
// do some logic that breaks out of the while loop
}
toast = null;
toastView = null;
} catch (Exception e) {
Log.e("LongToast", "", e);
}
}
};
t.start();
}
答案 0 :(得分:1)
你需要自己停止你的线程。由于java不允许你使用stop()函数。
为此线程编写类
public class YourThread extends Thread {
private volatile boolean stopped = false;
public void run() {
int count = 0;
try {
while (true && count < 40 && !stopped) {
try {
toast.show();
sleep(100);
count++;
} catch (Exception e) {
// TODO: handle exception
}
// do some logic that breaks out of the while loop
}
toast = null;
toastView = null;
} catch (Exception e) {
Log.e("LongToast", "", e);
}
}
public void stopThread() {
stopped = true;
}
}
现在,具有线程完成的活动将停止您的线程
@Override
protected void onDestroy() {
if(isFinishing())
yourThreadVariable.stopThread();
}
答案 1 :(得分:0)
finishing活动有效吗?
答案 2 :(得分:0)
不确定,但您可以在活动的join
中调用thread
的{{1}}函数。
答案 3 :(得分:0)
要停止线程,您只需使用interrupt()
即可。但为了更好的解决方案,我会说不要使用Thread
。只需使用Handler
创建Runnable
并使用Runnable
管理您的Handler
,这将是一个很好的方式,因为Android
已经为Handler管理了一个或多个Runnables
{ {1}}。
创建可运行的
Runnable runnable = new Runnable() {
@Override
public void run() {
// put your code stuff here
}
};
启动Runnable使用
handler.postDelayed(runnable, your_time_in_millis);
停止使用Runnable
handler.removeCallbacks(runnable);
答案 4 :(得分:0)
我也想建议Lalit Poptani方法并实现这个:
protected void onStop(){
handler.removeCallbacks(runnable);
super.onStop();
}
该方法的文档:
onStop,当活动不再对用户可见时调用,因为另一个活动已恢复并且正在覆盖此活动。这可能是因为正在开始新活动,现有活动被带到这个活动之前,或者这个活动正在被销毁。 http://developer.android.com/reference/android/app/Activity.html