2016-02-25 18 views
0

我正在運行我的Android測試應用程序中的一項服務,該服務需要顯示來自服務器中不斷增加的計數器值的烤麪包。Android KitKat沒有顯示一旦應用程序轉到背景Toast

它的起步很好,並顯示敬酒。但是,一旦我按下/ home按鈕將應用程序保留在後臺,則停止顯示敬酒。當我再次將應用程序放到前臺時,再次烤麪包開始可見

這個問題發生在罪惡的Kitkat。但在軟糖和下面,它的工作很好。

這是我的清單文件。

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.rtrgroup.mysms" 
    android:installLocation="internalOnly"> 
    <uses-sdk android:minSdkVersion="9" 
     android:targetSdkVersion="19"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true"> 
     <activity 
      android:name="com.rtrgroup.mysms.MainActivity" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <service android:name="com.rtrgroup.mysms.MyService" 
      android:enabled="true" 
      android:exported="true"> 
     </service> 
    </application> 

</manifest> 

這是我的MainActivity.java文件。

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public void onStart() { 
     Intent serviceIntent = new Intent(this, MyService.class); 
     startService(serviceIntent); 
} 
} 

這裏是我的服務代碼,MyService.java:

package com.rtrgroup.mysms; 

import android.app.Service; 
import android.content.Context; 
import android.content.Intent; 
import android.os.*; 
import android.widget.Toast; 



public class MyService extends Service { 
    Handler handler; 
    int count = 0; 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     handler = new Handler(); 

     handler.postDelayed(test, 1000); 

     return START_NOT_STICKY; 
    } 

    Runnable test = new Runnable() { 
     @Override 
     public void run() { 
      Toast.makeText(getApplicationContext(), "TOAST count = " + String.valueOf(count), Toast.LENGTH_SHORT).show(); 
      count++; 
      handler.postDelayed(test, 5000); 
     } 
    }; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 

那麼,如何使麪包總是可見,即使該應用程序在後臺和服務正在運行?請解釋。如果你想,當用戶把你的應用程序在後臺檢測,覆蓋此方法

@Override 
public void onTrimMemory(int level) { 
    super.onTrimMemory(level); 
    switch (level) { 
     case ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN: 
      // do your magic here 
      break; 
    } 

} 

查看文檔http://developer.android.com/reference/android/content/ComponentCallbacks2.html#TRIM_MEMORY_UI_HIDDEN

,你也可以在「前臺」模式啓動的服務在本次檢查

+0

爲什麼不使用通知?這是做到這一點的正確方法.. – Shmuel

回答