0

私はアンドロイドでこの問題を抱えています。これでスレッドを呼び出すメインアクティビティがあります

   Runnable work = new Runnable() {

    public void run() {
        while (kill) {
            try {
                Thread.sleep(5000);
                connect();
                } catch (InterruptedException ex) {
                Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
            }
        }


    }
};

MainActivityでパブリックブール値を強制終了します。スレッドを保存するために何ができるので、アクティビティを再開してもスレッドを強制終了できますか?

4

2 に答える 2

1

なぜ履歴書のスレッドを殺したいのですか?

connect()再開部分でスレッドを開始し、次に中断されたという事実を処理するためにfinallyブロックを配置し、再開したときに再接続して操作を実行するだけでよいのはなぜですか。

モバイルデバイスの場合、最善の策は、現在の場所にある永続ストレージにチェックマークを付けることです。これにより、中断された場合でも、再開時に続行できますActivity

中断される可能性が高いので、設計してください。

スレッドはOSによって強制終了される可能性があるため、後で保存して強制終了するものはありません。

あなたが本当にこのようなことをする必要があるなら、それRemoteServiceはあなたとは異なるプロセスで実行され、Activity周りにとどまる可能性が高いので、始めてください。

あなたはこの質問を見たいかもしれません:

Androidリモートサービス

于 2011-06-17T00:10:39.430 に答える
0

このソリューションが提案するものに近い何かをしたいと思います。

ただし、本当にそれをで続けたい場合は、Threadから新しいクラスを拡張し、 。Threadというメソッドを追加することをお勧めしますkillMe()。これにより、(現在はプライベートの)ブールkillフラグが変更されます。次に、でonRetainNonConfigurationInstance()これを返すことができThread、で再び取得できますonResume。戻ってアクティビティが強制終了されていない場合は、問題ありません。killMe()既存のを呼び出すだけThreadです。

例:

 @Override
  public Object onRetainNonConfigurationInstance() {
    return thread;
  }
于 2011-06-17T02:20:15.393 に答える