Как сделать так, чтобы служба Android продолжала работать в нормальных условиях?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как сделать так, чтобы служба Android продолжала работать в нормальных условиях?

Сообщение Anonymous »

Я хочу создать службу Android, которая сможет работать независимо от основного приложения. Это будет TCP-сервер для приема сообщений. Проект создается и управляется с помощью BeeWare, а не Android Studio. Я настроил манифест для запуска службы в отдельном процессе, и когда служба была запущена, я повысил ее статус до службы переднего плана. Теперь, если я зайду в диспетчер задач и уберу свое приложение, служба действительно продолжит работать. Но если я нажму кнопку X, чтобы очистить все последние приложения, служба тоже отключится. Что мне нужно сделать, чтобы моя служба продолжала работать при любых нормальных обстоятельствах? У меня достаточно оперативной памяти и батарея заряжена, поэтому это не должно привести к прекращению работы моего сервиса. У меня Android 13 на Xiaomi Redmi Note 10 Pro.
Примечание: Мой вопрос не является дубликатом этих вопросов, потому что им уже 10 лет, и все такое. были изменены, и они работают по-другому:
  • Уничтожит ли ОС Android мой IntentService при нормальных обстоятельствах?
  • Служба Android останавливается Когда приложение закрыто
Для справки, это мой файл манифеста:




















android:name="androidx.core.content.FileProvider"
android:authorities="com.example.myapp.fileprovider"
android:exported="false"
android:grantUriPermissions="true">








А это моя услуга:
package org.beeware.android;

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.os.Build;
import androidx.core.app.NotificationCompat;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;
import android.util.Log;

import com.chaquo.python.PyObject;
import com.chaquo.python.Python;
import com.chaquo.python.android.AndroidPlatform;

import com.example.myapp.R;

public class MyService extends Service {

private static final String ChannelID = "MyServiceChannel";
private String mySrv = "MyService";
private int ONGOING_NOTIFICATION_ID = 1; // This cannot be 0. So 1 is a good candidate.

@Override
public void onCreate() {
Log.d(mySrv, "Service created.");

// Start Python in this process
if (!Python.isStarted()) {
Python.start(new AndroidPlatform(this));
}

// Create notification channel
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel serviceChannel = new NotificationChannel(
ChannelID, "My Service Channel", NotificationManager.IMPORTANCE_DEFAULT);
NotificationManager manager = getSystemService(NotificationManager.class);
if (manager != null) { manager.createNotificationChannel(serviceChannel); }
}
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(mySrv, "Service started.");

// Put the service in a foreground state
Intent notifIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notifIntent, PendingIntent.FLAG_IMMUTABLE);
Notification notif = new NotificationCompat.Builder(this, ChannelID)
.setContentTitle("My Service")
.setContentText("Service is running")
.setSmallIcon(R.mipmap.ic_launcher_round)
.setContentIntent(pendingIntent)
.build();
startForeground(ONGOING_NOTIFICATION_ID, notif);

Log.d(mySrv, "Starting worker thread...");
Python py = Python.getInstance();
PyObject srv_thread = py.getModule("myapp.app");
srv_thread.callAttr("StartServer");
Log.d(mySrv, "Worker thread started.");

Toast.makeText(this, "Service started !", Toast.LENGTH_SHORT).show();
return START_STICKY;
}

@Override
public void onDestroy() {
Log.d(mySrv, "Stopping service thread...");
Python py = Python.getInstance();
PyObject srv_thread = py.getModule("myapp.app");
srv_thread.callAttr("StopServer");
Log.d(mySrv, "Service thread stopped.");

Toast.makeText(this, "Service stopped !", Toast.LENGTH_SHORT).show();
Log.d(mySrv, "Service destroyed.");
}

@Override
public IBinder onBind(Intent intent) {
// We don't provide binding, so return null
return null;
}
}


Подробнее здесь: https://stackoverflow.com/questions/788 ... cumstances
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»