我有一个弹出系统,用Textview显示弹出警报。 Popup类(如下所示)是通过另一个类的Intent调用的。 Popup类的代码在onCreate方法上显示Popup时起作用(完成它的代码显示在oncreate类的块注释中)。但是,我的功能是创建弹出窗口,以便它不会停止/暂停后台应用程序。几乎可以获得Toast的功能。在不中断后台应用程序的情况下显示弹出窗口。所以我决定使用AsynchTask实现它,但我一直得到运行时异常。有人能引导我走正确的道路吗?我相信我必须实现一个onPostExecute但不确定我应该怎么做。
public class Popups extends Activity {
private Dialog mDialog;
//static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.popups);
//IntentFilter filter = new IntentFilter(ACTION);
//this.registerReceiver(mReceivedSMSReceiver, filter);
/*
String message = getIntent().getStringExtra("message");
TextView messageView = (TextView) findViewById(R.id.message);
messageView.setText(message);
Handler handler = new Handler();
long delay = 5000;
handler.postDelayed(new Runnable() {
@Override
public void run() {
Popups.this.finish();
}
}, delay);
*/
PopupAsynch myPopup = new PopupAsynch();
myPopup.execute(1);
}
private class PopupAsynch extends AsyncTask<Integer, Void, Integer>
{
TextView messageView = (TextView) findViewById(R.id.message);
String message = getIntent().getStringExtra("message");
@Override
protected Integer doInBackground(Integer... params) {
Handler handler = new Handler();
long delay = 5000;
handler.postDelayed(new Runnable() {
@Override
public void run() {
Popups.this.finish();
}
}, delay);
messageView.setText(message);
return 1;
}
}
}
答案 0 :(得分:0)
首先显示弹出窗口的实现是不正确的。
您创建的第二个处理程序没有附加您的UI线程,您需要在此处理程序上调用Looper以将其附加到UI线程。
如果你使用更好的评论代码,而不是这个AsyncTask。
答案 1 :(得分:0)
Handler handler = new Handler();
这是使用AsyncTask线程循环器。任何从中更改UI的尝试都会导致错误。
代码中的AsyncTask似乎毫无用处。为什么不仅从Activity代码发布延迟到主处理程序?
答案 2 :(得分:0)
使用计时器正确实施
private Timer timer;
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Popups.this.finish();
messageView.setText(message);
}
});
}
}, 0, 5000);