应用程序进入后台后,Android KitKat无法显示Toast

时间:2016-02-25 18:57:16

标签: android android-4.4-kitkat toast

我正在从我的Android测试应用程序运行一项服务,该应用程序需要显示来自计数器值的吐司,该值在服务中不断增加。

它开始很好,并显示吐司。但是,一旦我按回/ home按钮将应用程序保持在后台,吐司就会停止显示。当我再次将应用程序带到前台时,再次启动烤面包

这个问题发生在Kitkat身上。但是在JellyBeans及以下,它的工作正常。

这是我的清单文件。

<?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;
    }
}

那么,即使应用程序处于后台并且服务正在运行,如何使toast始终可见?请解释一下。

1 个答案:

答案 0 :(得分:0)

如果您想要检测用户何时将您的应用置于后台,请覆盖此方法

  @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

您也可以在“前台”模式下启动此项检查 Show notification from background started service

或者您可以显示通知而不是祝酒。