onResume () и onPause () вызывается при первом запуске - PullRequest
1 голос
/ 31 мая 2019

У меня есть действие, и при запуске действия через Intent из одного из моих сервисов вызывается onCreate (), onPause () и onResume ().

Я не совсем уверен, где я делаюнеправильно, я удалил весь код, доступны только основные коды функций, а также я удалил все коды, открывающие эту конкретную деятельность, но поведение остается тем же.

Я включаю самый простой кодЯ использую

ActivityClass.java

public class ActivityClass extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        System.out.println("TEST : onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lockscreen);
        ButterKnife.bind(this);

    }

    @Override
    protected void onPause() {
        System.out.println("TEST : onPause");
        super.onPause();
    }

    @Override
    protected void onDestroy() {
        System.out.println("TEST : onDestroy");
        super.onDestroy();
    }

}

Класс обслуживания

public class OverlayService extends Service {

    Context context;
    public static final String TAG = OverlayService.class.getSimpleName();

    public OverlayService(Context applicationContext) {
        super();
        context = applicationContext;
    }

    public OverlayService() {

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, "[onCreateService]");
        super.onStartCommand(intent, flags, startId);
        KeyguardManager myKM = (KeyguardManager) getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE);
        if(myKM.inKeyguardRestrictedInputMode()) {
            //it is locked
            showOverlayActivity();
        } else {
            //it is not locked
        }
        registerOverlayReceiver();
        context = this;
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        unregisterOverlayReceiver();
        Log.i("EXIT", "ondestroy!");
    }

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        super.onTaskRemoved(rootIntent);
        Intent broadcastIntent = new Intent("ac.in.ActivityRecognition.RestartSensor");
        sendBroadcast(broadcastIntent);
    }

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

    private void unregisterOverlayReceiver() {
        if (overlayReceiver != null) {
            unregisterReceiver(overlayReceiver);
        }
    }

    private static final String ACTION_DEBUG = "kunal.lockoverlay.action.DEBUG";

    private void registerOverlayReceiver() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_ON);
        filter.addAction(ACTION_DEBUG);
        registerReceiver(overlayReceiver, filter);
    }

    private BroadcastReceiver overlayReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            Log.d(TAG, "[onReceive]" + action);
            if (action.equals(Intent.ACTION_SCREEN_ON)) {
                // ACTON_SCREEN_ON
                showOverlayActivity();
            } else if (action.equals(ACTION_DEBUG)) {
                showOverlayActivity();
            }
        }
    };

    private void showOverlayActivity() {
        Intent intent = new Intent();
        intent.setClass(this, ActivityClass.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }

}

Может кто-нибудь указать некоторые извозможные причины такого поведения или могли бы определить, где я делаю неправильно?

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Ну, все будет вызвано независимо, вы определили это в файле ClassName.java.

Вы переопределяете метод и определяете его в своем классе для выполнения определенного действия / функции при его вызове.

Например,

Вы можете использовать onResume, чтобы очистить список и добавить в него обновленные элементы (ИЛИ) отклонить все уведомления из вашего приложения при переходе к этому действию, скажем

@Override
public void onResume() {
    super.onResume();
    calendarList.clear();
//dismiss all notifications here
 NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
        if (notificationManager!=null)
            notificationManager.cancelAll();
}

ИЛИ, например, onDestroy для уничтожения службы Bluetooth,

 @Override
    public void onDestroy() {
        super.onDestroy();
        if (mBluetoothService != null) {
            mBluetoothService.stop();
        }
     }

Надеюсь, это прояснит. Удачного кодирования!

0 голосов
/ 31 мая 2019

О классе обслуживания, вы должны вызвать registerReceiver() или инициализировать переменные в onCreate вместо onStartCommand, потому что onCreate вызывается только один раз при первом запуске службы и onStartCommand будет вызываться каждый раз, когда вы хотите вызвать действие для службы, позвонив startService(Intent).

...