前台服务在执行互联网相关操作时被杀死

2024-02-19

更新:以前我找不到关于我的前台服务何时被终止的明确定义的模式。经过对发生这种情况的设备(并非所有设备上都发生)进行更多调试后,我发现了。

1.) 很多时候,当我打开 chrome 加载网站时,前台服务会被终止。有时甚至当我使用 Whatsapp 时也会发生这种情况。

2.) 没有例外,堆栈跟踪没有显示任何有用的信息。

原始问题如下:

StackOverflow 上有很多这样的问题,但到目前为止我读到的答案大多说这取决于 Android,我们不能 100% 保证前台服务不会被杀死。有些答案建议 START_STICKY 但这对我来说没有多大帮助。

就我而言,我有一个具有前台服务的音乐播放器应用程序。该服务在某些设备上被终止,主要是小米的某些版本(Android 版本为 5.1.1)。现在我知道 Android 可能内存不足,因此我的前台服务被终止,但为什么其他音乐播放器应用程序永远不会经历这样的终止。哪些事情是他们做对了而我做错了?

我使用以下方法制作了我的服务前台服务startForeground。我也回来START_STICKY在 onStartCommand 中,尽管这没有帮助,因为如果服务被终止,则会在 4-5 秒后重新启动。将我的服务与我使用的活动绑定

bindService(playIntent, musicConnection, Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT );

那么我到底可以在我的应用程序中改进/更改什么来防止这种情况发生,如果其他应用程序工作正常,那么在我的情况下一定有问题。有人可以帮忙吗?提前致谢 !!

Edit:

这就是我调用 startForeground() 的方式

public void sendNotification() {

        Intent notIntent = new Intent(this, MainActivity.class);
        notIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendInt = PendingIntent.getActivity(this, 0,
                notIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        Bitmap bitmap = null;
        if (!notificationShowing || !forwarded) {
            Log.i(TAG, "present");
            String title = CommonUtils.getSongFromID(songIndex, this);

            bigView.setTextViewText(R.id.title, title);
            bigView.setImageViewBitmap(R.id.img, bitmap);

            smallView.setTextViewText(R.id.title1, title);
            smallView.setImageViewBitmap(R.id.img1, bitmap);

            if (pauseButton == 1) {
                bigView.setImageViewResource(R.id.pause, R.drawable.pause_noti);
                smallView.setImageViewResource(R.id.pause1, R.drawable.pause_noti);
            } else {
                bigView.setImageViewResource(R.id.pause, R.drawable.play_noti);
                smallView.setImageViewResource(R.id.pause1, R.drawable.play_noti);
            }

            musicNotification = builder.setContentIntent(pendInt)
                    .setSmallIcon(R.drawable.logo1)
                    .setTicker(songTitle)
                    .setOngoing(true)
                    .setContentTitle("Playing")
                    .setStyle(new Notification.BigTextStyle().bigText("Song App"))
                    .setContentText(songTitle)
                    .setPriority(Notification.PRIORITY_MAX)
                    .build();

            musicNotification.contentView = smallView;
            musicNotification.bigContentView = bigView;

            musicNotification.contentIntent = pendInt;

            Intent switchIntent = new Intent("pause");
            switchIntent.putExtra("button", "pause");
            PendingIntent pendingSwitchIntent = PendingIntent.getBroadcast(this, 100, switchIntent, PendingIntent.FLAG_UPDATE_CURRENT);
            bigView.setOnClickPendingIntent(R.id.pause, pendingSwitchIntent);
            smallView.setOnClickPendingIntent(R.id.pause1, pendingSwitchIntent);

            Intent switchIntent1 = new Intent("forward");
            switchIntent1.putExtra("button", "forward");
            PendingIntent pendingSwitchIntent2 = PendingIntent.getBroadcast(this, 100, switchIntent1, PendingIntent.FLAG_UPDATE_CURRENT);
            bigView.setOnClickPendingIntent(R.id.forward, pendingSwitchIntent2);
            smallView.setOnClickPendingIntent(R.id.forward1, pendingSwitchIntent2);

            Intent switchIntent2 = new Intent("previous");
            switchIntent2.putExtra("button", "previous");
            PendingIntent pendingSwitchIntent3 = PendingIntent.getBroadcast(this, 100, switchIntent2, PendingIntent.FLAG_UPDATE_CURRENT);
            bigView.setOnClickPendingIntent(R.id.previous, pendingSwitchIntent3);
            smallView.setOnClickPendingIntent(R.id.previous1, pendingSwitchIntent3);

            Intent switchIntent3 = new Intent("end");
            switchIntent3.putExtra("button", "end");
            PendingIntent pendingSwitchIntent4 = PendingIntent.getBroadcast(this, 100, switchIntent3, PendingIntent.FLAG_UPDATE_CURRENT);
            bigView.setOnClickPendingIntent(R.id.end, pendingSwitchIntent4);
            smallView.setOnClickPendingIntent(R.id.end1, pendingSwitchIntent4);

            startForeground(NOTIFY_ID, musicNotification);
            notificationShowing = true;
        }
        forwarded = false;

    }

这件事发生在Xiomi电话由于以下原因。

MIUI 7.0 的解决方案 => 安全 => 自动启动 => 选择要在后台运行的应用程序 => 重新启动重新启动后,您的设备应该能够像其他 Android 设备一样在后台运行您的应用程序服务。

MIUI 4.0设置 http://en.miui.com/thread-33826-1-1.html

MIUI自动启动详细说明 http://en.miui.com/thread-117992-1-1.html

如果您正在寻找其他手机,请检查此处的服务结构。它会自动重新启动,但当您重新启动手机时,会调用 BootReceiver。

public class AppService extends Service {

private class LocalBinder extends Binder {
    public AppService getServerInstance() {

        return AppService.this;
    }
}


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


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // If we get killed, after returning from here, restart

    return Service.START_STICKY;
}

@Override
public void onCreate() {
    super.onCreate();

} 

@Override
public void onDestroy() {

}

}

谢谢希望这会对您有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前台服务在执行互联网相关操作时被杀死 的相关文章

随机推荐

  • TlbImp.exe 无法注册 lib 文件:“.dll 不是有效的类型库”

    该 dll是FKAtend dll 附带生物识别设备的VB6 0 SDK 该 dll在VB6 0环境下工作正常 但是 当尝试在另一台具有 VS NET 环境的 PC 上注册它时 出现上述错误 我们使用 dependency walker 检
  • 通过在 MATLAB 中计算平均值进行下采样

    假设我有一个包含 44100 个样本的文件 采样频率为 fs 44100 Hz 所以我的文件是 1 秒长 我想将其下采样到 8 Hz 的采样频率 但我不想通过获取每个 44100 8 5512 5 样本并将其保存在新数组中来实现此目的 但通
  • 构建无法从 VisualStudio 运行,但可以从 msbuild 运行

    从 Visual Studio 中的全新控制台应用程序模板中 我编辑了 csproj构建另一个这样的项目
  • 单选按钮多项选择

    我有许多具有不同名称属性的单选按钮 我面临一个问题 每次我单击每个单选按钮时 我都可以选择全部 我正在使用单选按钮重定向到其他页面 我不想只选择一项 我正在使用 twitter bootstrap 选项卡在一页上显示多个内容 只需切换选项卡
  • 未捕获对象错误:无法注入 ngAnimate

    当我尝试像这样注入 ngAnimate 时 我无法实例化我的应用程序 var app angular module musicsa ngCookies ngResource ngSanitize ui router firebase ngA
  • 基本日期之间查询 $gte、$lte 等

    我在 mongo 查询的正确时间格式方面遇到问题 我的问题是 Is time Timemongo ISODate 对象的正确 go 类型 为什么我的时间解析似乎解析完全不同的日期 这是我正在做的事情的完整示例 package main im
  • 如何使用 ngrok 托管 HTML 文件?

    是否可以使用 NGROK 托管 HTML 文件 而不是 Web 应用程序 我真的对 NGROK 一无所知 我只是用它来托管 Twilio 应用程序的服务器 并且想用它来托管我的另一个项目的 HTML 文件 另外 有人知道如何在 Mac 上创
  • CSS 转换在 IE 中不起作用

    我无法在 IE 或 Firefox 中实现此转换 但在 Safari 和 Chrome 中看起来不错 不透明度显示但是即时的 对我来说 下面的 CSS 看起来是正确的 但我看不出它有任何理由可以在 IE 或 Firefox 中工作 我已经使
  • 我在编译时遇到找不到符号错误

    import java io File import java io BufferedReader import java io InputStreamReader import java io import java io InputSt
  • 如何通过 URL 访问 Jenkins 在 lastSuccessfulBuild 中创建的工件?

    我正在使用 Jenkins 管道构建 Android 应用程序 构建成功完成后 它会创建一个 apk 文件 我希望 QA 团队的成员能够下载此文件并在将其上传到 Google 商店之前测试该应用程序 因此我希望这些用户 有权访问 Jenki
  • 将项目添加到不可变的 Seq

    假设我有一个字符串序列作为输入 我想获得一个新的不可变的Seq它由输入的元素和一个项目组成 c 以下是我发现有效的两种方法 assert Seq a b c Seq a b Seq c 这个的问题是 似乎实例化了一个临时序列 Seq c 只
  • tkinter:无法进入条目小部件

    我不明白为什么下面的输入框rackGUI py在我的代码中是静态的 不允许输入任何内容 我相信所有的Entry对象被正确实例化 我将文本变量指定为StringVar 我的直觉告诉我问题在于命令参数create button实例化 但我不太确
  • Jsoup 未下载整个页面

    网页是 http www hkex com hk eng market sec tradinfo stockcode eisdeqty pf htm http www hkex com hk eng market sec tradinfo
  • IdentityServer4分别对每个客户端进行身份验证

    我使用两个不同的客户端 IdentityServer4提供API保护和登录表单 我可以配置客户端以避免单点登录吗 我的意思是 即使我登录了第一个客户端 我也需要登录第二个客户端 我的ID4配置 internal static IEnumer
  • Highcharts 进度条形图

    是否可以在 Highcharts 中创建这样的进度图表 https 0 s3 envato com files 84221450 screenshots weblator responsive charts 7 bootstrap jpg
  • Jackson->Jackson + HttpPost =“无效的UTF-8中间字节”,设置Mime和编码

    我在我的客户端中使用 Apache HTTP 客户端库和 Jackson 当我将 JSON 发布到服务器时 出现错误 org codehaus jackson JsonParseException Invalid UTF 8 middle
  • 完全适合初学者使用 Maphilight?

    我正在尝试使用名为 maphilight 的 jquery 插件 我对使用 jquery 插件完全陌生 我对其他网页设计编码有相当多的经验 甚至对 javascript 有一点经验 但实际上尝试像这样实际使用它 这是第一次 我只是无法让这个
  • 运算符重载的基本规则和习惯用法是什么?

    注 答案已在特定订单 但由于许多用户根据投票而不是给出的时间对答案进行排序 因此这里有一个答案索引按照最有意义的顺序 C 中运算符重载的一般语法 https stackoverflow com questions 4421706 opera
  • 使用 Ant 构建 Android 项目 -- 找不到符号

    我正在尝试使用 ant 构建我的 android 项目 它在 eclipse 中运行良好 我运行错误并显示以下构建失败行 BUILD FAILED android sdks tools ant build xml 680 The follo
  • 前台服务在执行互联网相关操作时被杀死

    更新 以前我找不到关于我的前台服务何时被终止的明确定义的模式 经过对发生这种情况的设备 并非所有设备上都发生 进行更多调试后 我发现了 1 很多时候 当我打开 chrome 加载网站时 前台服务会被终止 有时甚至当我使用 Whatsapp