2

我正在开发一个必须始终运行并且只能通过任务杀手或类似工具关闭的应用程序。

我在清单中有:

android:persistent="true"

虽然按下主页按钮时没有关闭,但我发现它有时会关闭,我不希望这种情况发生。

我用户想要,可以通过从自定义启动器中杀死它或使用任务杀手来关闭应用程序。

有什么建议么?提前致谢

PD:如何使用后退按钮退出应用程序,但不关闭它,我的意思是停止显示应用程序或其任何活动,但应用程序应继续在后台运行。

我写了一个服务,但有些东西不能正常工作我在清单中添加了这个

<service android:name=".ONService"></service>

就在应用程序标记结束之前,这是 ONService.java:

package com.omninotifier.main;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;

public class ONService extends Service{

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}


@Override
public void onCreate() {
    // TODO Auto-generated method stub
    //super.onCreate();
}



@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub
    //return super.onStartCommand(intent, flags, startId);

    return START_STICKY;
}

@Override
public void onDestroy() {
    // TODO Auto-generated method stub

    NotificationManager manager = (NotificationManager)     
getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notification = new Notification(R.drawable.ic_stat_alert,   
getResources().getString(R.string.ServiceDestroyed), System.currentTimeMillis());
    notification.flags = Notification.FLAG_AUTO_CANCEL;
    manager.notify(150, notification);

    super.onDestroy();
}

 }

我启动服务,应用程序启动:

这是应用程序中的主要活动

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


   Intent serviceIntent = new Intent();
   serviceIntent.setAction(".ONService");
   startService(serviceIntent);

//............

}

我应该在服务标签中添加带有操作的意图过滤器以使其正常工作吗?还是其他问题?

问题是它无法启动服务。这是修复:

在清单中

<service android:name=".ONService">
<intent-filter android:priority="100">
    <action android:name=".ONService"/>
</intent-filter>
</service>

在调用服务的活动中:

Intent serviceIntent = new Intent(".ONService");


startService(serviceIntent);
4

5 回答 5

2

我正在开发一个必须始终运行并且只能通过任务杀手或类似工具关闭的应用程序。

这在严格意义上是不可能的。Android 可以并且最终会摆脱您的进程,以防止草率的开发人员试图拥有“必须始终运行的应用程序”。

如果您的应用程序是前台用户体验的一部分(例如,音乐播放器),您可以拥有一个调用 的服务startForeground(),这会降低 Android 摆脱您的进程的几率,只要Notification状态栏中有一个你的应用程序。您的应用程序最终仍会终止其进程,尽管它往往需要更长的时间。

或者,您可以自定义构建包含实现您的逻辑的 C 守护程序的 Android 操作系统,并分发包含您定制的 Android 的 ROM 模块。

于 2012-07-31T19:03:54.357 回答
1

要让您的应用程序在关闭后继续运行,您需要在应用程序内部创建一个服务来执行您希望在后台发生的任何事情。

如果您是开发 Android 应用程序的新手,您可能需要查看以下 Android 服务教程:http ://www.vogella.com/articles/AndroidServices/article.html 。此外,我发现 Android 文档非常有帮助。我建议您阅读API Guide for ServicesAPI Reference for the Service class

于 2012-07-31T18:47:29.483 回答
1

写一个服务。您的应用程序与服务通信。当您的应用程序退出时,该服务将继续运行。

http://developer.android.com/reference/android/app/Service.html

于 2012-07-31T18:47:56.663 回答
0

使用 Service、AlarmManager 和 BroadcastReceiver 的组合。AlarmManager 发出一个脉冲,BCReceiver 会根据需要每隔一段时间捕获并启动服务。这将实质上使服务无休止地活着,因为 Android 会看到它会定期被使用。从技术上讲,您的应用程序的生命周期,服务受 androids 控制,但您可以启动服务粘性,这有助于并定期调用它。AlarmManager 非常可靠。

于 2012-07-31T19:59:03.410 回答
0

如果您需要始终运行,请查看 aServicestartForeground。如果您可以让您的服务死掉但重新启动,请查看onStartCommandSTART_STICKY

于 2015-03-18T07:35:42.180 回答