OnDevicePersonalizationManager

public class OnDevicePersonalizationManager
extends Object

java.lang.Object
   ↳ android.adservices.ondevicepersonalization.OnDevicePersonalizationManager


OnDevicePersonalizationManager, ऐप्लिकेशन के लिए एपीआई उपलब्ध कराता है. इनसे, ऐप्लिकेशन को अलग-अलग प्रोसेस में IsolatedService को लोड करने और उससे इंटरैक्ट करने में मदद मिलती है. कोई ऐप्लिकेशन, IsolatedService से कॉन्टेंट जनरेट करने का अनुरोध कर सकता है, ताकि वह ऐप्लिकेशन के व्यू हैरारकी (व्यू और व्यू ग्रुप के लेआउट का क्रम) में मौजूद SurfaceView में कॉन्टेंट जनरेट कर सके. साथ ही, डिवाइस पर मौजूद स्टोरेज में लगातार नतीजे लिख सकता है. इन नतीजों को फ़ेडरेटेड Analytics, क्रॉस-डिवाइस आंकड़ों के विश्लेषण के लिए इस्तेमाल कर सकता है. इसके अलावा, मॉडल ट्रेनिंग के लिए फ़ेडरेटेड लर्निंग भी इसका इस्तेमाल कर सकता है. कॉल करने वाले ऐप्लिकेशन के पास, डिसप्ले किया गया कॉन्टेंट और लगातार दिखने वाला आउटपुट, दोनों को सीधे ऐक्सेस करने का विकल्प नहीं होता.

खास जानकारी

सार्वजनिक तरीके

void execute(ComponentName handler, PersistableBundle params, Executor executor, OutcomeReceiver<List<SurfacePackageToken>, Exception> receiver)

OnDevicePersonalization सैंडबॉक्स में IsolatedService को लागू करता है.

void requestSurfacePackage(SurfacePackageToken surfacePackageToken, IBinder surfaceViewHostToken, int displayId, int width, int height, Executor executor, OutcomeReceiver<SurfaceControlViewHost.SurfacePackageException> receiver)

कॉलिंग ऐप्लिकेशन के अंदर SurfaceView में SurfaceControlViewHost.SurfacePackage जोड़ने का अनुरोध करता है.

इनहेरिट किए गए तरीके

सार्वजनिक तरीके

execute

public void execute (ComponentName handler, 
                PersistableBundle params, 
                Executor executor, 
                OutcomeReceiver<List<SurfacePackageToken>, Exception> receiver)

OnDevicePersonalization सैंडबॉक्स में IsolatedService को लागू करता है. प्लैटफ़ॉर्म, किसी अलग प्रोसेस में बताए गए IsolatedService से बंधता है और कॉलर के दिए गए पैरामीटर के साथ IsolatedWorker#onExecute(ExecuteInput, java.util.function.Consumer) को कॉल करता है. IsolatedService के पूरा होने पर, प्लैटफ़ॉर्म कॉलर को ऐसे टोकन दिखाता है जो सेवा के नतीजों के बारे में बताते हैं. इन टोकन का इस्तेमाल, कॉल करने वाले ऐप्लिकेशन में SurfaceView में नतीजे दिखाने के लिए किया जा सकता है.

पैरामीटर
handler ComponentName: IsolatedService का ComponentName. यह वैल्यू null नहीं हो सकती.

params PersistableBundle: एक PersistableBundle, जिसे कॉल करने वाले ऐप्लिकेशन से IsolatedService में पास किया जाता है. इस पैरामीटर के लिए, कॉन्टेंट के लिए IsolatedService सेट किया गया है. प्लैटफ़ॉर्म इस पैरामीटर का इस्तेमाल नहीं करता. यह वैल्यू null नहीं हो सकती.

executor Executor: वह Executor जिस पर कॉलबैक को ट्रिगर करना है. यह वैल्यू null नहीं हो सकती. कॉलबैक और लिसनर इवेंट, इस Executor के ज़रिए डिस्पैच किए जाते हैं. इससे यह कंट्रोल करने का आसान तरीका मिलता है कि किस थ्रेड का इस्तेमाल किया जाए. अपने ऐप्लिकेशन के मुख्य थ्रेड से इवेंट भेजने के लिए, Context.getMainExecutor() का इस्तेमाल किया जा सकता है. इसके अलावा, कोई ऐसा Executor दें जो सही थ्रेड पर भेजे.

receiver OutcomeReceiver: यह SurfacePackageToken ऑब्जेक्ट की सूची दिखाता है. इनमें से हर ऑब्जेक्ट, IsolatedService से मिले RenderingConfig या गड़बड़ी होने पर मिले Exception का एक अस्पष्ट रेफ़रंस होता है. नतीजे के तौर पर मिले SurfacePackageToken ऑब्जेक्ट का इस्तेमाल, किसी व्यू में नतीजा दिखाने के लिए, अगले requestSurfacePackage(android.adservices.ondevicepersonalization.SurfacePackageToken, android.os.IBinder, int, int, int, java.util.concurrent.Executor, android.os.OutcomeReceiver) कॉल में किया जा सकता है. कॉल करने की सुविधा देने वाले ऐप्लिकेशन और IsolatedService को इस सूची के साइज़ से सहमत होना चाहिए. SurfacePackageToken ऑब्जेक्ट की लिस्ट में कोई एंट्री शून्य हो सकती है. इससे यह पता चलता है कि सेवा के पास उस खास प्लैटफ़ॉर्म के लिए कोई आउटपुट नहीं है. गड़बड़ी होने पर, रिसीवर इनमें से कोई एक अपवाद दिखाता है: अगर हैंडलर पैकेज इंस्टॉल नहीं है या उसके पास मान्य ODP मेनिफ़ेस्ट नहीं है, तो PackageManager.NameNotFoundException दिखाता है. अगर हैंडलर क्लास नहीं मिलती है, तो ClassNotFoundException दिखाता है. अगर हैंडलर को लागू करने में कोई गड़बड़ी होती है, तो OnDevicePersonalizationException दिखाता है.

requestSurfacePackage

public void requestSurfacePackage (SurfacePackageToken surfacePackageToken, 
                IBinder surfaceViewHostToken, 
                int displayId, 
                int width, 
                int height, 
                Executor executor, 
                OutcomeReceiver<SurfaceControlViewHost.SurfacePackageException> receiver)

कॉल करने वाले ऐप्लिकेशन में SurfaceView में SurfaceControlViewHost.SurfacePackage डालने का अनुरोध करता है. सरफ़ेस पैकेज में View होगा, जिसमें OnDevicePersonalization सैंडबॉक्स में चल रहे #execute(ComponentName, PersistableBundle, Executor, OutcomeReceiver) के पिछले कॉल के नतीजे का कॉन्टेंट होगा.

पैरामीटर
surfacePackageToken SurfacePackageToken: #execute(ComponentName, PersistableBundle, Executor, OutcomeReceiver) पर किए गए किसी पिछले कॉल से मिले SurfacePackageToken का रेफ़रंस. यह मान null नहीं हो सकता.

surfaceViewHostToken IBinder: SurfaceView का hostToken, जो व्यू हैरारकी में SurfaceView को जोड़ने के बाद, SurfaceView.getHostToken() से दिखाया जाता है. यह मान null नहीं हो सकता.

displayId int: उस लॉजिकल डिसप्ले का पूर्णांक आईडी जिस पर SurfaceControlViewHost.SurfacePackage दिखाना है. इसे Context.getDisplay().getDisplayId() से दिखाया जाता है.

width int: SurfaceControlViewHost.SurfacePackage की चौड़ाई, पिक्सल में.

height int: SurfaceControlViewHost.SurfacePackage की ऊंचाई, पिक्सल में.

executor Executor: वह Executor जिस पर कॉलबैक को लागू करना है यह वैल्यू null नहीं हो सकती. कॉलबैक और लिसनर इवेंट, इस Executor के ज़रिए डिस्पैच किए जाते हैं. इससे यह कंट्रोल करने का आसान तरीका मिलता है कि किस थ्रेड का इस्तेमाल किया जाए. अपने ऐप्लिकेशन की मुख्य थ्रेड के ज़रिए इवेंट भेजने के लिए, Context.getMainExecutor() का इस्तेमाल किया जा सकता है. इसके अलावा, कोई ऐसा Executor दें जो सही थ्रेड पर भेजे.

receiver OutcomeReceiver: यह फ़ंक्शन, काम पूरा होने पर SurfaceControlViewHost.SurfacePackage दिखाता है और काम पूरा न होने पर Exception दिखाता है. अगर हैंडलर को लागू करने में समस्या आती है, तो अपवाद का टाइप OnDevicePersonalizationException होता है. यह मान null नहीं हो सकता.