-1

こんにちは私は実行時にサンプルアプリケーションを作成しようとしています。ホーム画面に戻り、バックグラウンドプロセスを実行し、トーストポイントを表示します。Androidで仕事を処理するためのスレッド処理でのバックグラウンドプロセスの設定

私は、必要な作業を行うために、バックグラウンドプロセスで別のスレッドが必要になると考えています。ここに私の主な活動(BackGroundPrcessingExampleActivity)のコードは次のとおりです。ここで

enter code here 
public class BackGroundProcessExampleActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     try { 

      Intent myIntent = new Intent(this, MyService.class); 
      startService(myIntent); 

      moveTaskToBack(false); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

はコード「MyService.java」からです:

enter code here 
public int onStartCommand(Intent intent, int flags, int startId) { 

    Toast.makeText(getBaseContext(), "Service is started!", 1).show(); 

    myHandler = new Handler() { 

     @Override 
     public void handleMessage(Message msg) { 

      super.handleMessage(msg); 


       Toast.makeText(getBaseContext(), "Hello!", 
         Toast.LENGTH_SHORT).show(); 
     } 
    }; 



    Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 



      while (true) { 

       try {    

        Thread.sleep(2); 

        myHandler.sendEmptyMessage(0); 

       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 
    new Thread(runnable).start(); 

    return super.onStartCommand(intent, flags, startId); 
} 

私が午前問題はトーストメッセージが表示されないということです。私はブレークポイントを置くことができますが、コードをステップしているが、メッセージは表示されません。私は文脈が正しくないかもしれないと思う? UIのコンテキスト(BackGroundPRcessExampleActivity)が必要ですか?どんな助けもありがとうございます。事前に感謝します。

D

+0

あなたはこのトーストをやっていますか? "サービス開始!" – 5hssba

+0

はい私はそのトーストを手に入れています。 – Moo

答えて

0

、これは最終的に私のために働いたものです。通知コードが追加されました。

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    final NotificationManager notificationManager = (NotificationManager) 
      getSystemService(NOTIFICATION_SERVICE); 

    // Create Notifcation 
    final Notification notification = new Notification(R.drawable.ic_launcher, 
     "A new notification", System.currentTimeMillis()); 

    // Cancel the notification after its selected 
    notification.flags |= Notification.FLAG_AUTO_CANCEL; 
    // 
    notification.number += 1; 

    // Specify the called Activity 
    Intent intent2 = new Intent(this, NotificationReceiver.class); 

    Toast.makeText(getApplicationContext(), "Service is started!", 1) 
      .show(); 

    PendingIntent activity = PendingIntent.getActivity(this, 0, intent2, 0); 
    notification.setLatestEventInfo(this, "This is the title", 
     "This is the text", activity); 


    myHandler = new Handler(); 

    Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      int i = 0; 

      while (true) { 
       final int x = i++; 

       try { 
        Thread.sleep(500); 
       } catch (InterruptedException e1) { 
        e1.printStackTrace(); 
       } 

       myHandler.post(new Runnable() { 

        @Override 
        public void run() { 

         try { 
          Toast.makeText(getApplicationContext(), 
            "Hello!" + String.valueOf(x), 
            3).show(); 

          if(x == 100) 
           notificationManager.notify(0, notification); 
          Thread.sleep(1); 

         } catch (InterruptedException e) { 
          e.printStackTrace(); 
         } 
        } 
       }); 
      } 
     } 
    }; 
    new Thread(runnable).start(); 

ご協力いただきありがとうございます。

D

0

それを試してみてください - 回答の助けを借りて

public int onStartCommand(Intent intent, int flags, int startId) { 
Handler mHandler = new Handler(); 
Toast.makeText(getApplicationContext(), "Service is started!", 1).show(); 

Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     while (true) { 
      try { 
       Thread.sleep(5000); 

       mHandler.post(new Runnable() { 
       @Override 
       public void run() { 
         Toast.makeText(getApplicationContext(), "Hello!", Toast.LENGTH_LONG).show(); 
        } 
       }); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
}; 
new Thread(runnable).start(); 

return super.onStartCommand(intent, flags, startId); 

}

+0

あなたが提案したコードを試してみると、次のエラーが表示されます: 04-12 12:42:45.178:E/AndroidRuntime(15368):致命的な例外:スレッド10 04-12 12:42:45.178: E/AndroidRuntime(15368):java.lang.RuntimeException:Looper.prepare()を呼び出さなかったスレッド内でハンドラを作成できません。 04-12 12:42:45.178:E/AndroidRuntime(15368):\t at android .os.Handler。 (Handler.java:121) 4月12日12:42:45.178:E/AndroidRuntime(15368):\tでcom.example.backgroundprocess.MyService $ 1.run(MyService.java:51) 4月12日12:42:45.178:E/AndroidRuntime(15368):java.lang.Thread.runの\t(Thread.java:1027) – Moo

+0

申し訳ありませんが、mHandler.postを試してください –

関連する問題