{"id":468,"date":"2020-09-27T15:04:53","date_gmt":"2020-09-27T15:04:53","guid":{"rendered":"https:\/\/nurlandroid.com\/?p=468"},"modified":"2020-10-02T07:53:54","modified_gmt":"2020-10-02T07:53:54","slug":"%d1%85%d0%be%d0%bb%d0%be%d0%b4%d0%bd%d1%8b%d0%b9-%d0%b7%d0%b0%d0%bf%d1%83%d1%81%d0%ba-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f","status":"publish","type":"post","link":"https:\/\/nurlandroid.com\/?p=468","title":{"rendered":"&#171;\u0425\u043e\u043b\u043e\u0434\u043d\u044b\u0439&#187; \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f"},"content":{"rendered":"\n<p>\u0413\u043b\u0443\u0431\u043e\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 <strong>&#171;\u0445\u043e\u043b\u043e\u0434\u043d\u043e\u0433\u043e&#187; \u0437\u0430\u043f\u0443\u0441\u043a\u0430<\/strong> Android \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0430 \u0438\u043a\u043e\u043d\u043a\u0443 \u0438 \u0434\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>\u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435\u043c \u0441\u0435\u0440\u0438\u0438 \u043f\u043e\u0441\u0442\u043e\u0432 \u043e \u0433\u043b\u0443\u0431\u0438\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 Android-\u0430. <a href=\"https:\/\/nurlandroid.com\/?p=321\">\u041f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f<\/a> \u0431\u044b\u043b\u0430 \u043f\u0440\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 Android. \u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0441\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c <a href=\"https:\/\/dev.to\/pyricau\/android-vitals-diving-into-cold-start-waters-5hi6\">\u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u0441 \u043c\u043e\u0438\u043c\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438 =)<\/p>\n\n\n\n<p><strong>\u041e\u0431\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large wp-duotone-default-filter\"><img loading=\"lazy\" decoding=\"async\" width=\"790\" height=\"566\" src=\"https:\/\/nurlandroid.com\/wp-content\/uploads\/2020\/08\/app_loading_1.png\" alt=\"\" class=\"wp-image-471\" srcset=\"https:\/\/nurlandroid.com\/wp-content\/uploads\/2020\/08\/app_loading_1-300x214.png 300w, https:\/\/nurlandroid.com\/wp-content\/uploads\/2020\/08\/app_loading_1-768x550.png 768w, https:\/\/nurlandroid.com\/wp-content\/uploads\/2020\/08\/app_loading_1-788x565.png 788w, https:\/\/nurlandroid.com\/wp-content\/uploads\/2020\/08\/app_loading_1.png 790w\" sizes=\"auto, (max-width: 790px) 100vw, 790px\" \/><\/figure>\n\n\n\n<p><strong>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u044f \u043e\u043a\u043d\u043e&#8230;<\/strong><\/p>\n\n\n\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, <strong>system_server<\/strong> \u0441\u043e\u0437\u0434\u0430\u0435\u0442 <strong>\u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e<\/strong> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0435\u0442\u043e\u0434 <strong>PhoneWindowManager.addSplashScreen()<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class PhoneWindowManager implements WindowManagerPolicy {\n\n  public StartingSurface addSplashScreen(...) {\n    ...\n    PhoneWindow win = new PhoneWindow(context);\n    win.setIsStartingWindow(true);\n    win.setType(TYPE_APPLICATION_STARTING);\n    win.setTitle(label);\n    win.setDefaultIcon(icon);\n    win.setDefaultLogo(logo);\n    win.setLayout(MATCH_PARENT, MATCH_PARENT);\n\n    addSplashscreenContent(win, context);\n\n    WindowManager wm = (WindowManager) context.getSystemService(\n      WINDOW_SERVICE\n    );\n    View view = win.getDecorView();\n    wm.addView(view, params);\n    ...\n  }\n\n  private void addSplashscreenContent(PhoneWindow win,\n      Context ctx) {\n    TypedArray a = ctx.obtainStyledAttributes(R.styleable.Window);\n    int resId = a.getResourceId(\n      R.styleable.Window_windowSplashscreenContent,\n      0\n    );\n    a.recycle();\n    Drawable drawable = ctx.getDrawable(resId);\n    View v = new View(ctx);\n    v.setBackground(drawable);\n    win.setContentView(v);\n  }\n}<\/code><\/pre>\n\n\n\n<p><strong>\u0421\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e<\/strong> \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u043f\u043e\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041e\u043a\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 <strong>Activity<\/strong> \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u043d \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u0430\u0434\u0440. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d <strong>&#171;\u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0439&#187; \u0437\u0430\u043f\u0443\u0441\u043a<\/strong>. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 \u043e\u043a\u043d\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0439\u0442\u0435\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u043c =).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large wp-duotone-default-filter\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/practicaldev\/image\/fetch\/s--x2s9lBPZ--\/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880\/https:\/\/dev-to-uploads.s3.amazonaws.com\/i\/noysdmq6p1rpssxj7dwg.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0433\u043e \u043e\u043a\u043d\u0430 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 drawable-\u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 <strong>windowSplashscreenContent<\/strong> \u0438&nbsp;<strong>windowBackground<\/strong> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u043e\u0433\u043e Activity. \u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u043a\u043d\u0430:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized wp-duotone-default-filter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/practicaldev\/image\/fetch\/s--tiTzEU-7--\/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880\/https:\/\/dev-to-uploads.s3.amazonaws.com\/i\/g1dqkirifr11fbdqll34.png\" alt=\"\" width=\"224\" height=\"414\"\/><\/figure>\n\n\n\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 Activity \u0438\u0437 \u0440\u0435\u0436\u0438\u043c\u0430  <strong>\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430(Recent screen)<\/strong>, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430 \u043d\u0430\u0436\u0438\u043c\u0430\u044f \u043d\u0430 \u0438\u043a\u043e\u043d\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e <strong>system_server<\/strong> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 &nbsp;TaskSnapshotSurface.create(), \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c <strong>\u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e<\/strong> \u0438\u0437 \u0443\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430.<\/p>\n\n\n\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e, <strong>system_server<\/strong> \u0433\u043e\u0442\u043e\u0432 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 <strong>ZygoteProcess.startViaZygote()<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class ZygoteProcess {\n  private Process.ProcessStartResult startViaZygote(...) {\n    ArrayList&lt;String> argsForZygote = new ArrayList&lt;>();\n    argsForZygote.add(\"--runtime-args\");\n    argsForZygote.add(\"--setuid=\" + uid);\n    argsForZygote.add(\"--setgid=\" + gid);\n    argsForZygote.add(\"--runtime-flags=\" + runtimeFlags);\n    ...\n    return zygoteSendArgsAndGetResult(openZygoteSocketIfNeeded(abi),\n                                          zygotePolicyFlags,\n                                          argsForZygote);\n  }\n}<\/code><\/pre>\n\n\n\n<p>\u0412 \u043a\u043e\u0434\u0435 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 <strong>ZygoteProcess.zygoteSendArgsAndGetResult()<\/strong> \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u043a\u0435\u0442 <strong>Zygote-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443<\/strong>.<\/p>\n\n\n\n<p><strong>\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 Zygote-\u044b<\/strong><\/p>\n\n\n\n<p>\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Android-\u0430 \u043e\u0431 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0441\u043b\u0435\u0434\u0443\u0435\u0442:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>\u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u043e\u0440\u043a\u0430\u043d\u0438\u044f(\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f) \u043e\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e Zygote-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430&#8230;<\/p><\/blockquote>\n\n\n\n<p>\u0412\u043a\u0440\u0430\u0442\u0446\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u044f \u043f\u0438\u0441\u0430\u043b \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e <a href=\"https:\/\/nurlandroid.com\/?p=321\">\u0437\u0430\u043f\u0443\u0441\u043a Android-\u0430<\/a>. \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e\u0433\u043b\u0443\u0431\u0436\u0435 \u0432 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b.<\/p>\n\n\n\n<p>\u041a\u043e\u0433\u0434\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 Zygote \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 ZygoteInit.main():<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class ZygoteInit {\n\n  public static void main(String argv&#91;]) {\n    ...\n    if (!enableLazyPreload) {\n        preload(bootTimingsTraceLog);\n    }\n    \/\/ The select loop returns early in the child process after\n    \/\/ a fork and loops forever in the zygote.\n    caller = zygoteServer.runSelectLoop(abiList);\n    \/\/ We're in the child process and have exited the\n    \/\/ select loop. Proceed to execute the command.\n    if (caller != null) {\n      caller.run();\n    }\n  }\n\n  static void preload(TimingsTraceLog bootTimingsTraceLog) {\n    preloadClasses();\n    cacheNonBootClasspathClassLoaders();\n    preloadResources();\n    nativePreloadAppProcessHALs();\n    maybePreloadGraphicsDriver();\n    preloadSharedLibraries();\n    preloadTextResources();\n    WebViewFactory.prepareWebViewInZygote();\n    warmUpJcaProviders();\n  }\n}<\/code><\/pre>\n\n\n\n<p>\u041a\u0430\u043a \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434 <strong>ZygoteInit.main() <\/strong>\u0434\u0435\u043b\u0430\u0435\u0442 2 \u0432\u0430\u0436\u043d\u044b\u0435 \u0432\u0435\u0449\u0438:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u041f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b Android-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430. \u041f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u043e \u0435\u0449\u0435 \u0438 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/li><li>\u0414\u0430\u043b\u0435\u0435 \u043e\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 <strong>ZygoteServer.runSelectLoop()<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 <strong>\u0441\u043e\u043a\u0435\u0442<\/strong> \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u043a\u0435\u0442\u0430.<\/li><\/ul>\n\n\n\n<p>\u041a\u043e\u0433\u0434\u0430 \u0436\u0435 \u043d\u0430 \u0441\u043e\u043a\u0435\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0430 \u0444\u043e\u0440\u043a\u0438\u043d\u0433 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043c\u0435\u0442\u043e\u0434 <strong>ZygoteConnection.processOneCommand()<\/strong> \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0435\u0442\u043e\u0434 <strong>ZygoteArguments.parseArgs()<\/strong> \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 <strong>Zygote.forkAndSpecialize()<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public final class Zygote {\n\n  public static int forkAndSpecialize(...) {\n    ZygoteHooks.preFork();\n\n    int pid = nativeForkAndSpecialize(...);\n\n    \/\/ Set the Java Language thread priority to the default value.\n    Thread.currentThread().setPriority(Thread.NORM_PRIORITY);\n\n    ZygoteHooks.postForkCommon();\n    return pid;\n  }\n}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large wp-duotone-default-filter\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/practicaldev\/image\/fetch\/s--bgWlFBDE--\/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880\/https:\/\/dev-to-uploads.s3.amazonaws.com\/i\/8xqcaxu0wdpypf5w3748.png\" alt=\"\"\/><\/figure>\n\n\n\n<p><strong>\u041d\u0430 \u0437\u0430\u043c\u0435\u0442\u043a\u0443:<\/strong> \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Android 10 \u0435\u0441\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0444\u0438\u0447\u0430 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <strong>Unspecialized App Process<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u043c\u0435\u0435\u0442 \u043f\u0443\u043b \u043d\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 Zygote-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u0434\u043b\u044f \u0435\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n\n\n\n<p><strong>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u043e\u0441\u044c!<\/strong><\/p>\n\n\n\n<p>\u041f\u043e\u0441\u043b\u0435 \u0444\u043e\u0440\u043a\u0430 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 <strong>RuntimeInit.commonInit()<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 <strong>UncaughtExceptionHandler<\/strong>. \u0414\u0430\u043b\u0435\u0435, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 <strong>ActivityThread.main()<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public final class ActivityThread {\n\n  public static void main(String&#91;] args) {\n    Looper.prepareMainLooper();\n\n    ActivityThread thread = new ActivityThread();\n    thread.attach(false, startSeq);\n\n    Looper.loop();\n  }\n\n  final ApplicationThread mAppThread = new ApplicationThread();\n\n  private void attach(boolean system, long startSeq) {\n    if (!system) {\n      IActivityManager mgr = ActivityManager.getService();\n      mgr.attachApplication(mAppThread, startSeq);\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<p>\u0422\u0443\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0434\u0432\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0432\u0435\u0449\u0438:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u041c\u0435\u0442\u043e\u0434 <strong>ActivityThread.main()<\/strong> \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 <strong>\u043f\u043e\u0442\u043e\u043a(Thread)<\/strong> \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434&nbsp;<strong>Looper.loop(),&nbsp;<\/strong>\u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u0438\u043d\u0441\u0442\u0430\u043d\u0441 <strong>Looper<\/strong>-\u0430. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a \u043d\u043e\u0432\u043e\u043c\u0443 <strong>\u043f\u043e\u0442\u043e\u043a\u0443<\/strong>(\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f <strong>MainThread<\/strong>-\u043e\u043c aka <strong>UiThread<\/strong>) \u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c(\u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438) \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e. <strong>Looper<\/strong> \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0432\u0448\u0438\u0441\u044c, \u0431\u0443\u0434\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0438\u0445 \u043a \u0441\u0432\u043e\u0435\u043c\u0443 <strong>MessageQueue<\/strong>. \u041e\u0431 \u044d\u0442\u043e\u043c \u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043f\u0438\u0441\u0430\u043b <a href=\"https:\/\/nurlandroid.com\/?p=240\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/li><li>\u0414\u0430\u043b\u0435\u0435, \u043c\u0435\u0442\u043e\u0434 <strong>ActivityThread.attach()<\/strong> \u0434\u0435\u043b\u0430\u0435\u0442 IPC-\u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u043c\u0435\u0442\u043e\u0434\u0443 <strong>ActivityManagerService.attachApplication()<\/strong> <strong>system_server<\/strong>-\u0430, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0434\u0430\u0432\u0430\u044f \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e <strong>MainThread<\/strong> \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u0438 \u0433\u043e\u0442\u043e\u0432 \u043a \u0440\u0430\u0431\u043e\u0442\u0435.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large wp-duotone-default-filter\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/practicaldev\/image\/fetch\/s--8VBI-Xp8--\/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880\/https:\/\/dev-to-uploads.s3.amazonaws.com\/i\/57kdxf83tv93dc3xxdog.png\" alt=\"\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c<\/strong><\/p>\n\n\n\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 <strong>system_server<\/strong> \u043c\u0435\u0442\u043e\u0434 ActivityManagerService.<strong>attachApplication()<\/strong> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 ActivityManagerService.<strong>attachApplicationLocked()<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class ActivityManagerService extends IActivityManager.Stub {\n\n  private boolean attachApplicationLocked(\n      IApplicationThread thread, int pid, int callingUid,\n      long startSeq) {\n    thread.bindApplication(...);\n\n    \/\/ See if the top visible activity is waiting to run\n    \/\/  in this process...\n    mAtmInternal.attachApplication(...);\n\n    \/\/ Find any services that should be running in this process...\n    mServices.attachApplicationLocked(app, processName);\n\n    \/\/ Check if a next-broadcast receiver is in this process...\n    if (isPendingBroadcastProcessLocked(pid)) {\n        sendPendingBroadcastsLocked(app);\n    }\n    return true;\n  }\n}<\/code><\/pre>\n\n\n\n<p>\u041f\u0430\u0440\u043e\u0447\u043a\u0430 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0432\u044b\u0432\u043e\u0434\u043e\u0432:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 <strong>system_server<\/strong> \u0434\u0435\u043b\u0430\u0435\u0442 IPC-\u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u043c\u0435\u0442\u043e\u0434\u0443 ActivityThread<strong>.bindApplication()<\/strong> \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u043c\u0435\u0442\u043e\u0434\u0443 ActivityThread.<strong>handleBindApplication()<\/strong> \u0432 <strong>MainThread<\/strong>-\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/li><li>\u0421\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, <strong>system_server<\/strong> \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a Pending Activity, Service \u0438 BroadcastReciever-\u043e\u0432 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/li><li>\u041c\u0435\u0442\u043e\u0434 ActivityThread.<strong>handleBindApplication()<\/strong> \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 APK-\u0444\u0430\u0439\u043b \u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/li><li>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0438\u043c\u0435\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430 ActivityThread.<strong>handleBindApplication()<\/strong>, \u0442\u0430\u043a \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0445\u043e\u043b\u043e\u0434\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large wp-duotone-default-filter\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/practicaldev\/image\/fetch\/s--7yB3x_mA--\/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880\/https:\/\/dev-to-uploads.s3.amazonaws.com\/i\/7c1ivkjz9b4it2imzcf2.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c 3-\u0438\u0439 \u043f\u0443\u043d\u043a\u0442 \u0438 \u0443\u0437\u043d\u0430\u0435\u043c \u0447\u0442\u043e \u0438 \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0448\u0430\u0433\u043e\u0432 \u0442\u0430\u043a\u043e\u0439:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>AppComponentFactory<\/strong>.<\/li><li>\u0412\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430&nbsp; AppComponentFactory.<strong>instantiateClassLoader()<\/strong>.<\/li><li>\u0412\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 AppComponentFactory.<strong>instantiateApplication()<\/strong>&nbsp;\u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>Application<\/strong>.<\/li><li>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e&nbsp;<strong>ContentProvider<\/strong>-\u0430, \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430, \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 AppComponentFactory.<strong>instantiateProvider()<\/strong> \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430, \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 ContentProvider.<strong>onCreate()<\/strong>.<\/li><li>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 Application.<strong>onCreate()<\/strong>.<\/li><\/ul>\n\n\n\n<p><strong>\u042d\u043f\u0438\u043b\u043e\u0433<\/strong><\/p>\n\n\n\n<p>\u041c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u0438\u0437\u0443\u0447\u0430\u0442\u044c &#171;\u0445\u043e\u043b\u043e\u0434\u043d\u0443\u044e&#187; \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0441 \u043e\u0447\u0435\u043d\u044c \u043e\u0431\u0449\u0435-\u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large wp-duotone-default-filter\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/practicaldev\/image\/fetch\/s--X3gSD4f---\/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880\/https:\/\/dev-to-uploads.s3.amazonaws.com\/i\/i3vrdsk7b61dlu75y364.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 &#171;\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c&#187;:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large wp-duotone-default-filter\"><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/practicaldev\/image\/fetch\/s--ijQPo5W7--\/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880\/https:\/\/dev-to-uploads.s3.amazonaws.com\/i\/puh3wi86r25lhktnnyxv.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>\u041d\u0443 \u0447\u0442\u043e \u0436\u0435, \u044d\u0442\u043e \u0431\u044b\u043b \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u043f\u043e\u0441\u0442 =) \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435! \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0445 \u043c\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0435 \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Android-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u0441\u0442\u0430\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u0441 \u043d\u0430\u043c\u0438!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0413\u043b\u0443\u0431\u043e\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 &#171;\u0445\u043e\u043b\u043e\u0434\u043d\u043e\u0433\u043e&#187; \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Android \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0430 \u0438\u043a\u043e\u043d\u043a\u0443 \u0438 \u0434\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,20],"tags":[],"class_list":["post-468","post","type-post","status-publish","format-standard","hentry","category-android","category-core"],"_links":{"self":[{"href":"https:\/\/nurlandroid.com\/index.php?rest_route=\/wp\/v2\/posts\/468","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nurlandroid.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nurlandroid.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nurlandroid.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nurlandroid.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=468"}],"version-history":[{"count":17,"href":"https:\/\/nurlandroid.com\/index.php?rest_route=\/wp\/v2\/posts\/468\/revisions"}],"predecessor-version":[{"id":487,"href":"https:\/\/nurlandroid.com\/index.php?rest_route=\/wp\/v2\/posts\/468\/revisions\/487"}],"wp:attachment":[{"href":"https:\/\/nurlandroid.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nurlandroid.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nurlandroid.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}