Megosztás a következőn keresztül:


Egyéni összetettség natív tevékenység használatával

A CustomCompositeNativeActivity minta bemutatja, hogyan írhat olyan NativeActivity objektumokat, amelyek más Activity objektumokat ütemeznek a munkafolyamat végrehajtásának szabályozásához. Ez a minta két gyakori vezérlőfolyamatot (Sequence and While) használ a művelet menetének bemutatásához.

Minta részletei

MySequenceAz első dolog, amit észre kell venni , hogy származik NativeActivity. NativeActivity az az Activity objektum, amely a munkafolyamat-futtatókörnyezet teljes szélességét elérhetővé teszi a NativeActivityContext metódusnak Execute átadott módon.

MySequence nyilvános objektumgyűjteményt Activity tesz elérhetővé, amelyet a munkafolyamat szerzője tölt fel. A munkafolyamat végrehajtása előtt a munkafolyamat-futtatókörnyezet meghívja a metódust a CacheMetadata munkafolyamat minden tevékenységén. A folyamat során a futtatókörnyezet szülő-gyermek kapcsolatokat hoz létre az adatok hatókörkezeléséhez és az élettartam-kezeléshez. A metódus alapértelmezett implementációja a CacheMetadata tevékenység példányosztályát használja a MySequence tevékenységhez bármilyen típusú vagy gyermek MySequence típusú nyilvános tulajdonság<> ActivityActivityIEnumerablehozzáadásához.TypeDescriptor

Amikor egy tevékenység gyermektevékenységek nyilvános gyűjteményét teszi elérhetővé, valószínűleg ezek a gyermektevékenységek osztoznak az állapoton. Ebben az esetben MySequenceajánlott a szülőtevékenységnek olyan változók gyűjteményét is elérhetővé tenni, amelyeken keresztül a gyermektevékenységek ezt el tudják érni. A gyermektevékenységekhez hasonlóan a CacheMetadata metódus a tevékenységhez társított nyilvános típusú Variable vagy IEnumerableVariable<> változókat is hozzáadja.MySequence

A gyermekek által MySequenceMySequence manipulált nyilvános változókon kívül azt is nyomon kell követni, hogy hol van a gyermekei végrehajtásában. Ehhez egy privát változót currentIndexhasznál. Ez a változó a MySequence környezet részeként van regisztrálva, ha egy hívást ad hozzá a AddImplementationVariable metódushoz a MySequence tevékenység metódusán CacheMetadata belül. A Activity gyűjteményhez hozzáadott objektumok nem férnek hozzá az MySequence Activities így hozzáadott változókhoz.

Amikor MySequence a futtatókörnyezet végrehajtja, a futtatókörnyezet meghívja annak metódusát Execute , és egy NativeActivityContext. A NativeActivityContext tevékenység proxyja visszakerül a futtatókörnyezetbe az argumentumok és változók elhalasztására, valamint más Activity objektumok ütemezésére vagy ActivityDelegates. MySequence egy metódussal InternalExecute foglalja össze az első gyermek és az összes későbbi gyermek egyetlen metódusba való ütemezésének logikáját. A művelet a halasztással currentIndexkezdődik. Ha megegyezik a Activities gyűjtemény számával, akkor a sorozat befejeződött, a tevékenység munka ütemezése nélkül tér vissza, és a futtatókörnyezet áthelyezi az Closed állapotba. Ha ez currentIndex kisebb, mint a tevékenységek száma, a rendszer a következő gyermeket a gyűjteményből és MySequence a Activities hívásokból ScheduleActivityszerzi be, és átadja a gyermeknek az ütemezést, és a CompletionCallback metódusra InternalExecute mutat. Végül a rendszer növeli a currentIndex léptetést, és a vezérlés visszaáll a futtatókörnyezetre. Mindaddig, amíg egy példányhoz MySequence gyermekobjektum Activity van ütemezve, a futtatókörnyezet végrehajtási állapotúnak tekinti.

Amikor a gyermektevékenység befejeződik, a rendszer végrehajtja.CompletionCallback A hurok felülről folytatódik. Például Executeegy CompletionCallback olyan, NativeActivityContextamely hozzáférést ad a megvalósítónak a futtatókörnyezethez.

MyWhileabban különbözikMySequence, hogy ismétlődően ütemez egy Activity objektumot, és egy elnevezett Condition bool> használatával Activity<TResult><határozza meg, hogy ez az ütemezés történjen-e. Például MySequenceegy MyWhile InternalExecute metódus használatával központosítja az ütemezési logikát. Beütemezi a Condition<Activitybool egy<CompletionCallback<TResult> bool>> nevű .OnEvaluationCompleted Ha a végrehajtás Condition befejeződött, az eredmény egy erősen gépelt, elnevezett resultparaméterben válik elérhetővéCompletionCallback. Ha true, MyWhile hívás ScheduleActivity, továbbítás az BodyActivity objektumban és InternalExecute a CompletionCallback. Amikor a végrehajtás befejeződik Body , Condition a rendszer újra ütemezi a InternalExecuteciklust, és újra elindítja a ciklust. Amikor a Condition visszaadott falseérték egy példánya MyWhile a futtatókörnyezethez ad vissza vezérlést anélkül, hogy ütemezni szeretné a Body futtatókörnyezetet, és a futtatókörnyezet áthelyezi azt az Closed állapotba.

A minta beállítása, összeállítása és futtatása

  1. Nyissa meg a Composite.sln mintamegoldást a Visual Studióban.

  2. Fordítsa le és futtassa a megoldást.