当前位置: 首页 > 知识库问答 >
问题:

Android KitKat在应用进入后台后不会显示吐司

漆雕和昶
2023-03-14

我正在从我的Android测试应用程序运行一个服务,它需要显示在一个服务中不断增加的toast from计数器值。

它的开始很好,展示了祝酒词。但是,一旦我按下Back/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>
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);
}
}
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始终可见,甚至app在后台,服务在运行?请解释一下。

共有1个答案

谭翰海
2023-03-14

如果您想检测用户何时将应用程序放在后台,请重写此方法

  @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

您也可以在“前台”模式下启动您的服务,以检查显示后台启动服务的通知

 类似资料:
  • 问题内容: 我正在为Swift编写的iOS游戏。我试图找到一种方法来检测应用程序何时进入后台模式或由于其他原因而中断,例如电话,但找不到任何东西。我该怎么做? 问题答案: 您可以将观察者添加到视图控制器中: 编辑/更新: Xcode 11•Swift 5 iOS13或更高版本 iOS12或更早版本 并将选择器方法添加到视图控制器,该方法将在您的应用收到该通知时执行:

  • 我想为一个聊天应用程序实现FCM推送通知服务,我遵循Firebase文档中的步骤,当通知从Firebase控制台发送到我的设备时,我会得到通知。当我尝试使用http post to https://FCM.googleapis.com/FCM/send通过FCM将通知通过服务器端发送到设备时: 当应用程序处于活动状态并且我正在将此通知发送到我的设备时,Im在我的控制台日志中收到以下消息,所以我认为

  • 当我尝试打开我的后台产品页面时,它只显示空白的白色页面。 前台没有问题。 当我启用调试模式时,当我尝试打开前台时,它会显示此消息 在后台没有显示任何产品,但没有空白页。 请帮帮我。我使用prestashop 1.7

  • 当应用程序处于前台时,我可以成功地接收带有图像的通知和数据消息。 当应用程序在后台/kill时,onMessageReceed(message)没有调用,所以我使用getIntent(),我得到了数据,但当应用程序在后台时,android os会使用系统托盘自动显示通知,但图像无法显示。 所以我的问题是用图像显示通知文本? 我使用django api发送通知和发送的数据如下所示 下面是我的onMe

  • null 而当app在后台时,系统托盘总是显示一个到达一个重复的通知(如收到通知a,系统托盘显示2个通知a)。 怎么解决这个问题? 编辑:添加的代码 我扩展了 类,并在 方法中包含该类 这是项目中我使用NotificationManager的唯一部分。 另外,我尝试在这个方法上添加一个日志。当应用程序处于前台时调用onMessageReceived。当应用程序在后台时,它不会被调用

  • 如果fcm消息包含“通知”部分,而应用程序在后台,则通知传递到系统托盘和数据中的附加意图。 问题是,我无法更改该通知的重要性,而且它们总是不显示弹出窗口。我为API26+修复了这个问题,我添加了通知通道 但对于API25-我找不到解决方案。一个建议是删除“notification”部分,只保留“data”,这将允许fcm将消息传递到 当应用程序在后台/前台,我将能够显示我的自定义通知。