Я наблюдал много "интроспективного стека" кода в приложениях, которые часто неявно полагаются на их содержащие методы , а не , чтобы их правильность была встроена. Такие методы обычно включают вызовы:
MethodBase.GetCurrentMethod
Assembly.GetCallingAssembly
Assembly.GetExecutingAssembly
Теперь я нахожу информацию, касающуюся этих методов, очень запутанной. Я слышал, что во время выполнения не будет встроен метод, вызывающий GetCurrentMethod, но я не могу найти никакой документации по этому поводу. Я несколько раз видел сообщения на StackOverflow, такие как этот , указывающие, что CLR не выполняет встроенные вызовы кросс-сборки, но документация GetCallingAssembly
категорически указывает на обратное.
Существует также сильно критикуемый [MethodImpl (MethodImplOptions.NoInlining)]
, но я не уверен, считает ли это CLR быть "запросом" или "командой".
Обратите внимание, что я спрашиваю о встраивании права с точки зрения контракта, не о том, когда текущие реализации JITter отказываются рассмотреть методы из-за трудностей реализации или из-за того, когда JITter окончательно завершит выбор для встраивания подходящего метода после оценки компромиссов. Я прочитал this и this , но они, кажется, больше сосредоточены на последних двух пунктах (есть случайные упоминания MethodImpOptions.NoInlining и " В AnalyticsReceiver есть следующий код:
public void onReceive(Context ctx, Intent intent)
/* */ {
/* 24 */ String referrer = intent.getStringExtra("referrer");
/* */
/* 26 */ if ((!
("com.android.vending.INSTALL_REFERRER".equals(intent.getAction())))
|| (referrer == null))
/* */ {
/* 28 */ return;
/* */ }
/* */
/* 31 */ String formattedReferrer = formatReferrer(referrer);
/* */
/* 33 */ if (formattedReferrer != null) {
/* 34 */ PersistentEventStore store = new
PersistentEventStore(ctx);
/* 35 */ store.setReferrer(formattedReferrer);
/* 36 */ Log.d("googleanalytics", new
StringBuilder().append("Stored
referrer:").append(formattedReferrer).toString());
/* */ } else {
/* 38 */ Log.w("googleanalytics", "Badly formatted referrer, ignored");
/* */ }
/* */ }
Обратите внимание на две строки 36 и 38, которые регистрируют "googleanalytics". Я попытался продвинуть указанное выше приложение на рынок, загрузив его на свой Nexus One (после удаления предыдущей версии приложения) . Я создал ссылку, используя страницу Google, на которую я ссылался в начале этого сообщения
http://www.google.com/url?sa=D&q=http://market.android.com/search%3Fq % 3Dpname: com.package.app% 26referrer% 3Dutm_source% 253Dgoogle% 2526utm_medium% 253Dcpc% 2526utm_term% 253Drunning% 25252Bshoes% 2526utm_content% 253Dcontent1% 2526utm_campaign% 253gDcontent1% 2526utm_IBWqwq, загруженный из приложения IOneCBHiWR_slogin и прикреплённый к приложению IOSNFWLOKJSLoGSLog по этой ссылке, я не вижу никаких журналов из "googleanalytics" или "myapp". Остальная часть библиотеки Google Analytics работает для моего приложения. Т.е. я вижу в Google Analytics записи о посещениях страниц и т. Д. Однако все источники трафика являются «прямым трафиком». Я не понимаю, что происходит. Кто-нибудь
есть хоть какое-то представление о том, что я делаю неправильно?