2017-07-19 7 views
0

バックグラウンドサービスとして次のコードトリガトーストを使用しようとしましたが、が100回まで動作していないので、が20回実行されます。通知のバックグラウンドサービスが機能していません

フェルトサービスが破壊されます。アプリを閉じても、バックグラウンドサービスとして30分差で通知をトリガする方法

  • 私は通知としてイブニングとおやすみ良い、良い午後、おはよう表示する必要があります。

  • インターネットをサポートしていません。

次の手順は正常ではありませんか?私はそう思う。これを行う方法?

import android.app.Service; 

public class HelloService extends Service { 

    private static final String TAG = "HelloService"; 
    int i=0; 
    private boolean isRunning = false; 

    @Override 
    public void onCreate() { 
     Log.i(TAG, "Service onCreate"); 
     Toast.makeText(this, " On create Hello Service Started", Toast.LENGTH_LONG).show(); 
     isRunning = true; 
    } 

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

     Log.i(TAG, "Service onStartCommand"); 



       for (;i<100; i++) { 
        try { 
//      Thread.sleep(1000); 

Toast.makeText(getApplicationContext(), "Hello Service On Loop"+i , Toast.LENGTH_LONG).show(); 
// 
        } catch (Exception e) { 
        } 
       } 

       //Stop service once it finishes its task 
//  i++; 
       stopSelf(); 


     return Service.START_STICKY; 
    } 


    @Override 
    public IBinder onBind(Intent arg0) { 
     Log.i(TAG, "Service onBind"); 
     return null; 
    } 

    @Override 
    public void onDestroy() { 

     isRunning = false; 

     Log.i(TAG, "Service onDestroy"); 
    } 
} 
+0

どのようなエラーが表示されていますか? – androidnoobdev

答えて

1

onStartCommand()がメイン(UI)スレッドで呼び出されます。 onStartCommand()の中でループを実行すると、メイン(UI)スレッドをブロックできないため、Androidは約30秒後にANR(アプリケーションが応答しない)でプロセスを強制終了します。

あなたはどちらかあなたのServiceを開始しますタイマーを設定したり、特定の時間にBroadcastReceiverをトリガーするか、一定の遅延でonStartCommand()HandlerからRunnableを投稿し、あなたがやりたいことができますしAlarmManagerを使ってやりたいことができますRunnableのバックグラウンドスレッドを開始するか、onStartCommand()でバックグラウンドスレッドを開始することができます。バックグラウンドスレッドは、ループしてスリープしたり、何でもしてからやりたいことをすることができます。

いずれにしても、毎秒Toastを表示することはできません。これは、UIをトーストで溢れさせ、アンドロイドはそれらのほとんどをダンプする(無視する)か、UIが非常に忙しくて、AndroidがANRのためにあなたのアプリを殺すか、ユーザーがあなたのアプリをアンインストールするだけです!

関連する問題