0

テキストビューでポップアップアラートを表示するポップアップシステムがあります。Popup クラス (以下を参照) は、別のクラスから Intent を介して呼び出されます。Popup クラスのコードは、Popup が onCreate メソッドで表示されるときに機能します (それを行うコードは、oncreate クラスのブロック コメントに示されています)。ただし、私の機能は、バックグラウンド アプリケーションを停止/一時停止しないようにポップアップを作成することです。トーストの機能をほとんど取得します。バックグラウンド アプリを中断せずにポップアップを表示します。そのため、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;

    }

}


}
4

3 に答える 3

0
Handler handler = new Handler();

これは AsyncTask スレッド ルーパーを使用しています。また、そこから UI を変更しようとすると、エラーが発生します。

コード内の AsyncTask は役に立たないようです。アクティビティ コードのみからメイン ハンドラーに遅延を投稿しないのはなぜですか?

于 2013-08-21T03:58:05.307 に答える
0

まず、ポップアップを表示するこの実装は正しくありません。

作成した 2 番目の Handler は UI スレッドに関連付けられていません。この Handler で Looper を呼び出して UI スレッドに関連付ける必要があります。

コメント付きのコードを使用する場合は、この AsyncTask の代わりに、より優れたものになります。

于 2013-08-21T03:56:18.523 に答える