Jelentéskészítés az előrehaladásról

A hosszan futó feladatoknak (amelyek egy másodpercnél tovább tartanak) jelentést kell adniuk az előrehaladásról az IProgressMonitor számára, amely átkerül a feladat run metódusához. A munkaterület előrehaladás nézet megjeleníti az összes előrehaladás üzenetet és a befejezett munka egységeit a megfigyelő számára.

A biztosított előrehaladás-figyelőt az előrehaladás nézetből küldött törlési kérések ellenőrzéséhez is használni kell. Ha a felhasználó (vagy a bedolgozó egy feladat API segítségével) megpróbál törölni egy feladatot, akkor az IProgressMonitor isCanceled() metódusa igaz értéket ad vissza. A feladat felelőssége, hogy gyakran ellenőrizze a feladat törlés állapotát és válaszoljon a törlésre azáltal, hogy amilyen hamar csak lehet, kilép a run metódusból, amikor észleli a törlést. Az alábbi run metódus jelentést készít az előrehaladásról és válaszol a feladattörlésre:

         public IStatus run(IProgressMonitor monitor) {
final int
ticks = 6000;
monitor.beginTask("Doing some work", ticks);
try {		
for (int i = 0; i < ticks; i++) {
if
(monitor.isCanceled())
return
Status.CANCEL_STATUS;
monitor.subTask("Processing tick #" + i);

//... végrehajt valami feladatot ...
monitor.worked(1);
         }
   } finally {
monitor.done();
      }
return Status.OK_STATUS;
}

A beginTask metódus megnevezi a feladatot a megfelelő előrehaladás nézetben, és kialakítja a teljes végrehajtandó munkát, így a nézet fel tudja dolgozni az előrhaladást. A subTask üzenetek leszármazottként jelennek meg az előrehaladás fában, ha a munka befejeződött. Az előrehaladás nézet kiszámítja és megjeleníti a végrehajtott százalékot a worked hívásokban jelentett munka mennyisége alapján.

Előrehaladás-figyelők és az UI

Ahogy láthatja, az IProgressMonitor osztályt a megfelelő UI támogatás figyelembe vételével alakították ki. A platform UI bedolgozója támogatást biztosít, így a munkaterület meg tudja jeleníteni a futó feladatok előrehaladását. A feladatok ennek figyelembe vételével állíthatja be, így szabályozhatja a megjelenítésüket.

A feladatok előrehaladásának megjelenítéséhez rendelkezésre álló alkalmazás programozási felületek részletesebb leírását a Munkaterület konkurencia támogatás tartalmazza.

Rendszerfeladatok

Mi történik, ha a feladat egy alacsony szintű megvalósítási részlet, amelyet nem kíván megjeleníteni a felhasználó számára? Beállíthatja a feladatok rendszerfeladatként. A rendszerfeladat olyan, mint a többi feladat, azzal a kiétellel, hogy a megfelelő UI támogatás nem állít be előrehaladás nézetet, és nem jelenít meg futó feladathoz rendelt más UI affordances. Ha a feladatot nem közvetlenül a felhasználó kezdeményezte, vagy nem egy periodikus feladat, amelyet a felhasználó beállíthat, akkor a feladatnak rendszerfeladatnak kell lennie. A rendszerfeladat beállításának protokollja egyszerű:

      class TrivialJob extends Job {
      public TrivialJob() {
         super("Trivial Job");
         setSystem(true);
      }
      ...
   }

A setSystem hívást a feladat ütemezés előtt kell kiadni. Egy kivétel történik, ha ezt a hívást egy olyan feladaton próbálja meg, amely jelenleg várakozik, alszik vagy fut.

Felhasználói feladatok

Ha a feladat egy hosszan futó művelet, amelyet a felhasználó kezdeményezett, akkor a feladatnak felhasználói feladatnak kell lennie. A felhasználói feladat egy modális előrehaladás párbeszédablakban jelenik meg, amely egy gombot biztosít a párbeszédablak háttérbe mozgatásához. A munkaterület meghatároz egy felhasználói beállítást, amely szabályozza, hogy ezek a párbeszédablakok modálisak-e. Ha a feladatot felhasználói feladatként adja meg, akkor az előrehaladás visszajelzés automatikusan meg fog felelni az előrehaladás megjelenítés felhasználói beállításának. A felhasználói feladat beállításának protokollja hasonló:

      class TrivialJob extends Job {
      public TrivialJob() {
         super("Trivial Job");
         setUser(true);
      }
      ...
   }

A setUser hívást szintén a feladat ütemezése előtt kell kiadni.

Előrehaladás csoportok

Az Előrehaladás csoportok egy másik mechanizmus, melynek segítségével befolyásolható a feladatok megjelenése az UI-n. Ha megfelelőbb a számos kapcsolódó feladat összesített előrehaladásának megjelenítése az UI-n, akkor létrehozható egy speciális IProgressMonitor elem, amely megjeleníti a létrehozható kapcsolódó feladatok csoportját. Ez a figyelő az IJobManager protokoll segítségével kerül létrehozásra. Az alábbi részlet megjeleníti, hogy hogyan hozható létre egy előrehaladás csoport, és hogyan rendelhető hozzá egy feladathoz.

   ...
   IJobManager jobMan = Platform.getJobManager();

myGroup = jobMan.createProgressGroup();

job.setProgressGroup(myGroup, 600);  // megadja a munkaegységet, amelyet a
feladatnak meg kell jelenítenie.
job.schedule()
   ...

A csoport szolgáltatás segítségével a bedolgozók a feladatokat szükség esetén több feladatra szedhetik szét, de a jelentést a felhasználó számára úgy kell készíteni, mintha egy feladatot alkotnának. Az előrehaladáscsoport-figyelő kezeli a csoport összes feladatához viszonyított százalékos befejezés feldolgozásának részleteit.

A feladatot ütemezés előtt az előrehaladás-csoportba kell helyezni. A feladat futásának befejezése után az előrehaladás-csoportra mutató hivatkozás elveszik. Ha a feladatot újból ütemezni kell, akkor ütemezés előtt újból be kell állítani a csoportba.