Toast
こんにちは、アプリケーション内で好きなときにいつでも、どのスレッドからでも利用できるようにしたいと考えています。これを行うために、Activity
クラスを拡張しました。
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;
public class MyActivity extends Activity{
private Handler mHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
mHandler = new Handler();
super.onCreate(savedInstanceState);
}
private class ToastRunnable implements Runnable {
String mText;
public ToastRunnable(String text) {
mText = text;
}
public void run(){
Toast.makeText(getApplicationContext(), mText, Toast.LENGTH_SHORT).show();
}
}
public void doToast(String msg) {
mHandler.post(new ToastRunnable(msg));
}
}
私のアプリのすべての Activity
クラスが単純になるように
public class AppMain extends MyActivity {
//blah
}
私が(ワーカースレッドで)できると思っていたのはこれでした:
try{
MyActivity me = (MyActivity) Looper.getMainLooper().getThread();
me.doToast("Hello World");
}
catch (Exception ex){
Log.e("oh dear", ex.getMessage());
}
Activity
が " " である限りMyActivity
は動作するはずですが、問題は --->Looper.getMainLooper().getThread();
が を返しMyActivity
てくれず、泣きそうになることです。何が間違っているのでしょうか?
: 編集 :
「なぜ」私がこのタイプの実装にこだわっているのかを説明するための背景。
「HTTP POST」イベントが成功したことをユーザーに確認できるようにする必要があります。今。ユーザーが UI フォームで [OK] をクリックすると、その時点でインターネットが接続されている場合と接続されていない場合があります。インターネットはほとんどありません (Android アプリの 99.999% は、これに不自由な / 哀れな / 鳴き声を上げており、基本的に、インターネットが常に存在することを前提として、プラン "b"をユーザーに提供していません)。
私のアプリは「(私が呼んでいるように)ラメになる」ことはありません-代わりにプラン「b」があり、ポストイベントを「キューに入れ」、x分ごとに再試行します..今、これはバックグラウンドでサイレントスレッドです..私アプリ全体で多くのユーザー インタラクションがある ユーザーがどこに「いる」かはわかりませんが、最終的には、キュー/再試行/キュー/再試行する HTTP POST が「! 成功!」 を返すときToast
に、ユーザー (例: 「フォームが送信されました」)