Android退出程序后保留服务,应用程序关闭后无法使android服务保持活动状态

本文探讨了如何在Android应用关闭后让IntentService和Service保持运行,即使用户离开。作者分享了尝试过的代码片段,并揭示了在实际场景中遇到的问题。通过实例展示了未成功的尝试和可能的解决方案,以解决服务在应用关闭时被杀的问题。
摘要由CSDN通过智能技术生成

即使用户关闭了应用程序,我也会尝试生成一直保持活动状态的服务.根据这些线程

这可以通过IntentServices或Service.START_STICKY来完成

然而,我尝试了两种类型的服务而没有成功.换句话说,当用户关闭应用程序时,我的服务就会被杀死.有人可以指出这是否可以做到以及如何做?这是我尝试过的没有成功:

使用IntentService:

public class MyIntentService extends IntentService {

private final int mPollingTimeMS = 500;

private int mInitializationPollingCount = 0;

private Thread mPollThread;

public MyIntentService() {

super("MyIntentService");

}

@Override

protected void onHandleIntent(Intent intent) {

mPollThread = new Thread() {

public void run() {

while (true) {

try {

Log.e(Constants.Engine.LOGGER_TAG_DEV,

"SDK Service Running: " +

mInitializationPollingCount * mPollingTimeMS +

"ms have elapsed");

mInitializationPollingCount++;

sleep(mPollingTimeMS);

} catch (Exception e) {

StackTraceElement trace = new Exception().getStackTrace()[0];

Logger.e(Constants.Engine.LOGGER_TAG_APP, "[Exception:" + e.toString() + "]" +

trace.getClassName() + "->" + trace.getMethodName() + ":" + trace.getLineNumber());

}

}

}

};

mPollThread.start();

}

}

和服务:

public class MyService extends Service {

public MyService() {

}

private final int mPollingTimeMS = 500;

private int mInitializationPollingCount = 0;

private Thread mPollThread;

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

mPollThread = new Thread() {

public void run() {

while (true) {

try {

Log.e(Constants.Engine.LOGGER_TAG_DEV,

"SDK Service Running: " +

mInitializationPollingCount * mPollingTimeMS +

"ms have elapsed");

mInitializationPollingCount++;

sleep(mPollingTimeMS);

} catch (Exception e) {

StackTraceElement trace = new Exception().getStackTrace()[0];

Logger.e(Constants.Engine.LOGGER_TAG_APP, "[Exception:" + e.toString() + "]" +

trace.getClassName() + "->" + trace.getMethodName() + ":" + trace.getLineNumber());

}

}

}

};

mPollThread.start();

return Service.START_STICKY;

}

@Override

public IBinder onBind(Intent intent) {

// I tried to return null here, but this

// service gets killed no matter what.

return null;

}

}

这是清单:

android:name=".mycompany.MyService"

android:enabled="true"

android:exported="true"

android:process=":process1">

android:name=".mycompany.MyIntentService"

android:process=":process2"

android:exported="false">

我将补充说,我正在关闭测试应用程序而不是关闭按钮,而是使用Android OS应用程序管理器.见下图

29dc4955b8b951b83c8d698545d5a87b.png

最后,司机活动(那里不多)

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Intent intent1 = new Intent(getBaseContext(), MyService.class);

startService(intent1);

Intent intent2 = new Intent(getBaseContext(), MyIntentService.class);

startService(intent2);

}

}

我还尝试添加通知并使其成为前台服务,但仍然是相同的事情.关闭应用程序的那一刻,一切都被杀死了.这就是我添加的内容:

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

showNotification();

...etc..

private void showNotification() {

Intent notificationIntent = new Intent(this, MainActivity.class);

notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,

notificationIntent, 0);

int iconId = R.mipmap.ic_launcher;

int uniqueCode = new Random().nextInt(Integer.MAX_VALUE);

Notification notification = new NotificationCompat.Builder(this)

.setSmallIcon(iconId)

.setContentText("Context Text")

.setContentIntent(pendingIntent).build();

startForeground(uniqueCode, notification);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值