Как мне сделать поток, который всегда работает, даже если приложение закрыто на android? - PullRequest
0 голосов
/ 13 июля 2020

Я тоже пытаюсь создать службу, которая работает, даже если приложение закрыто (если вы открываете список приложений и нажимаете очистить все), поток с пока l oop все еще работает. Кто-нибудь знает, как это сделать? *

public class SilentService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            while (true) {
                //the good stuff
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }).start();
    return START_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
}

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

это вызывается MainActivity. java с использованием

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //some ui stuff

        if (!isServiceRunning(SilentService.class)) {
           startService(new Intent(this, SilentService.class));
        }
    }
    private boolean isServiceRunning(Class<?> serviceClass) {
        ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
            if (serviceClass.getName().equals(service.service.getClassName())) {
                return true;
            }
        }
        return false;
    }

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Вы можете сделать это хитростью, во-первых, вы должны использовать службу переднего плана вместо фоновой, потому что ОС убивает фоновую службу из-за нехватки памяти. во-вторых, вам необходимо повторно запустить эту службу после перезапуска системы с помощью широковещательного приемника, в-третьих, вам необходимо получить некоторые разрешения на некоторых устройствах, таких как телефоны Huawei.

0 голосов
/ 13 июля 2020

Как сделать поток, который всегда работает, даже если приложение закрыто на android?

Вы этого не делаете - вы не можете создать постоянную фоновую службу на Android.

Просмотрите документацию по фоновой работе и используйте более подходящий инструмент для вашей задачи (перезапускаемый Service / Foreground Service / WorkManager / et c).

https://developer.android.com/guide/background

Надеюсь, что это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...