1

私はファイルスキャナアプリケーションで作業するためにプログレスバービューを取得しようとしていましたが、アクティビティ、サービス、スレッド、およびハンドラの適切な組み合わせによって完全に困惑しています。元のアクティビティで統合された進行状況バーを更新する

構造は次のとおりです。マイアクティビティには、水平スタイルのProgressBarが含まれています。メニュー項目をクリックすると、onCreate()というサービスが起動され、進捗バーを更新できるようになります。

私の質問:何が欠けていますか?

  1. 活性(プログレスバー付き) "A"
                2 "" .onOptionsItemSelected():スポーンサービス "B"
                                  3.onCreate():ProgressBarを "a" // hで制御する

    <ProgressBar 
        style="?android:attr/progressBarStyleHorizontal" 
        android:layout_height="wrap_content" 
        android:max="100" 
        android:progress="0" 
        android:secondaryProgress="0" 
        android:layout_width="300px" 
        android:layout_marginLeft="10px" 
        android:id="@+id/progress_horizontal" 
        /> 
    

    "" .onOptionsItemSelected(2):私はプログレスバーのための私の悩み

レイアウトを持っているところEREは、(1)である

public boolean onOptionsItemSelected(MenuItem item) 
{ 
      if (svc == null) 
      { 
       android.util.Log.v("@@@@@@@@@@@@@@@@@@@@@", "starting"); 
       svc = new Intent(this, DoScan.class); 
       // done in "a".onCreate() 
          // hmap = new HashMap(); 
        // hmap.put("tv", tv); 
       svc.putExtra("hmap", hmap); 
       startService(svc); 
      } 
      break; 
} 

"B" .onCreate( )(3):

@Override 
public void onCreate() { 
    super.onCreate(); 

    //startThread(); 
    TextView tv = (TextView) Peekaboo.hmap.get("tv"); 
    tv.append("cocktail"); 
} 
+0

私が探しているのは、アクティビティが生成されたサーバーと通信する方法です。 – montooner

答えて

0

あなたのサービスのonCreate()は問題があります:

    プログレスバー

での作業時に

  • はサービスからウィジェットを変更しようとしないでくださいサービスにウィジェットを渡すためにしようとしないでください
  • は、バックグラウンドスレッドを使用しようか#1と#2の用語を使用して、ユーザーが画面を回転させたとき(G1のキーボードをスライドさせるなど)に何が起こるかを自問し、サービスが保持しているウィジェットは無効になります。

    #3に関して、ローカルサービスを開始しても自動的にバックグラウンドスレッドは作成されません。サービスは、アクティビティおよび他のすべてのアクティビティと同じスレッドで実行されます。バックグラウンドスレッドで作業を行う場合は、スレッドを作成してハンドラまたはpost()またはpostDelayed()またはrunOnUiThread()を使用して、バックグラウンドスレッドでUIスレッドのUI更新が行われるようにします。

  • 0

    あなたのプログラムは特別なことなしに、1つのスレッド、UIスレッド、OSのUIスレッドで実行されます。実行する別のスレッドを作成しないかぎり、プログラムで実行されている処理はUIスレッドで実行されています。そのスレッドはタスクの進行状況をUIスレッドに戻す必要があります(Runnable、Handler、Threadクラスを使用します)。その後、メインのUIスレッドは、ユーザーがProgressBarで見る内容を更新します。

    この一番良いことは、SDKスレッドの例を1時間ほどとらえて作業することです。

    開始場所は、herehereです。

    関連する問題