Che cosa è successo alla terminazione automatica?

2

In Mac OS X Lion (10.7) Apple ha introdotto una funzionalità chiamata " Terminazione automatica " in cui le app si chiudono automaticamente dopo un po 'di inattività.

Personalmente l'ho visto solo lavorando con Anteprima e poche altre app. Né Apple né gli sviluppatori di terze parti sembravano adottarla molto. E negli ultimi anni, non ho mai visto una singola app abbandonare automaticamente, nemmeno Anteprima.

La mia domanda è: cosa è successo a questa funzione? Esiste ancora? Qualche sviluppatore ne fa uso? E perché Apple stessa ha smesso di usarlo nelle sue app?

    
posta Arthur 13.09.2016 - 11:48
fonte

2 risposte

2

La terminazione automatica rimane parte di macOS. Se implementato correttamente, non dovresti vederlo in azione.

Per scoprire quali applicazioni conoscono la terminazione automatica, invia il seguente comando in Terminal.app :

grep -r NSSupportsAutomaticTermination /Applications

Richiede più codice

Il supporto della terminazione automatica richiede uno sforzo aggiuntivo e spesso richiesto dallo sviluppatore dell'applicazione.

L'applicazione deve gestire un ambiente in cui potrebbe essere richiesto di uscire (quasi) in qualsiasi momento; ciò significa essere in grado di salvare e ripristinare lo stato rapidamente, senza l'interazione dell'utente e in (quasi) ogni momento:

Automatic termination is a feature that you must explicitly code for in your app. Declaring support for automatic termination is easy, but apps also need to work with the system to save the current state of their user interface so that it can be restored later as needed. The system can kill the underlying process for an auto-terminable app at any time, so saving this information maintains continuity for the app. Usually, the system kills an app’s underlying process some time after the user has closed all of the app’s windows. However, the system may also kill an app with open windows if the app is not currently on screen, perhaps because the user hid it or switched spaces.

Chiedi a Apple

Perché Apple sembra aver rimosso il supporto da alcune delle loro applicazioni in OS X 10.11 è una domanda più diretta ad Apple .

A Matter of Priorities

Chiunque scriva applicazioni Mac deve giudicare se questa è una caratteristica che vale la pena implementare e se il tempo di ingegnerizzazione è meglio speso altrove. Questo sarà sempre una questione di giudizio per lo sviluppatore, quindi sospetto che la tua domanda non possa mai essere risolta in modo definitivo.

Informa gli sviluppatori

Se hai applicazioni che vuoi supportare la terminazione automatica, dillo agli sviluppatori dell'applicazione. Se un numero sufficiente di clienti ha un valore di Terminazione automatica, gli sviluppatori impiegheranno il tempo necessario per implementarlo.

    
risposta data 13.09.2016 - 17:11
fonte
0

La risposta di Graham Miln è molto completa, ci sono solo alcune note che vorrei aggiungere:

1) Un'app può supportare Terminazione automatica o Terminazione improvvisa o persino entrambi . La differenza tra questi due è: Con la terminazione automatica il sistema può uscire dall'app "a piacimento" ma lo interromperà "normalmente" (proprio come se scegli Quit <AppName> dal menu <AppName> ), consentendo all'app di eseguire alcuni lavori su smettere, quindi può essere ripristinato in quello stato quando viene riaperto. Con Sudden Termination, il sistema può "uccidere" l'app "a piacimento" senza alcuna possibilità che l'app esegua azioni prima di morire, poiché morirà immediatamente, il che è molto più veloce.

2) Le app possono supportare entrambe le forme di terminazione senza dichiararle nel loro file Info.plist , quindi grep non sta elencando un'app non significa che l'app non supporterà nessuna delle due funzioni. In realtà, la voce Info.plist modifica solo il comportamento predefinito di un'app. Il comportamento predefinito è di non supportare nessuno, a meno che il codice non ne abiliti uno in modo esplicito. Se dichiarato nel file Info.plist , il comportamento è il contrario: la funzionalità dichiarata è abilitata per impostazione predefinita, a meno che il codice non la disabiliti esplicitamente.

3) Il motivo per il controllo di queste funzionalità nel codice è che solo l'app stessa può sapere se è attualmente realmente inattiva o in realtà in attesa di qualche evento e quindi non deve morire al momento. Pertanto, un'app può temporaneamente disattivare entrambe le parti in attesa che accada qualcosa o elaborare alcuni dati internamente e quindi riattivarli una volta terminato.

4) In entrambi i casi, il sistema decide quando terminare un'app e quando non lo fa ("a volontà") e in molti casi il sistema semplicemente non lo desidera in quanto non ha motivo di farlo. Per esempio. se il sistema esaurisce la memoria, cercherà in modo aggressivo le app che può terminare per liberare rapidamente la memoria per quelle che devono continuare a funzionare, ma finché non c'è carenza, quale vantaggio avrebbe il sistema per uccidere queste app ? La prossima volta che li usi, devono essere riavviati, il che è uno spreco di tempo di elaborazione quando non c'erano motivi per chiuderli in primo luogo. E la mancanza di memoria non è definita dalla quantità di memoria libera che hai (non c'è carenza solo perché tutta la memoria sembra in uso) ma dalla cosiddetta "pressione della memoria". Monitoraggio attività può mostrare la pressione della memoria del tuo sistema. Quindi, solo perché un'app supporta entrambe le forme di terminazione, non è detto che il sistema utilizzerà effettivamente tale funzionalità.

5) Con l'introduzione dei servizi XPC in 10.8, alcune app hanno iniziato a utilizzare questi piccoli helper per eseguire le loro attività di elaborazione. I servizi XPC supportano implicitamente la risoluzione improvvisa. Nonostante appartengano a un'app, i servizi XPC non visualizzano alcuna interfaccia utente (e non vengono visualizzati nel Dock), quindi non si noterà quando vengono avviati e quando vengono interrotti. Ciò significa che, invece di avere il sistema che interrompe l'intera app per risparmiare risorse, le app con risorse intense possono utilizzare XPC Services e il sistema interromperà questi servizi XPC, se necessario, il che rende spesso inutile per l'app stessa supportare una delle due modalità di terminazione. l'applicazione ora non salverà molte risorse del sistema se l'utilizzo delle risorse principali è causato dai servizi XPC di tale applicazione.

    
risposta data 15.11.2017 - 15:57
fonte

Leggi altre domande sui tag