2017-07-19 77 views
0

我試着用下面的代碼作爲後臺服務的toast,但它得到執行了20次,它不工作,直到100.使用線程它不工作給出錯誤。後臺服務通知不起作用

毛氈服務被破壞。

  • 如何觸發與作爲後臺服務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()內部執行一個循環,Android將在ANR(應用程序未響應)約30秒後終止進程,因爲你不能阻塞主(UI)線程。

你可以做你想做的任何使用AlarmManager設置一個計時器,將啓動Service或在特定時間觸發BroadcastReceiver,也可以在onStartCommand()發佈RunnableHandler具有一定的延遲,做你想做的在Runnable中,或者你可以在onStartCommand()中啓動後臺線程,後臺線程可以循環和休眠,然後做你想做的事情。

無論如何,您無法每秒顯示Toast。這將使用UI吐出敬酒信息,並且Android會轉儲大部分內容(忽略它們),或者UI將非常忙碌,以顯示Android會由於ANR而終止您的應用,否則用戶只會卸載您的應用!