Не вызывается метод onCreate()

262
26 ноября 2016, 19:21

Хочу хранить состояние некоторых объектов и что бы эти объекты были доступны всюду.

Создал такой класс.

package com.uilmorcraft.uilmorlibrary;
public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Log.v("APPLICATION", "onCreate()");
    }
}

В манифесте прописал так.

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.uilmorcraft.uilmorlibrary">
        <uses-feature android:name="android.hardware.location.network " />
        <uses-feature android:name="android.hardware.location.gps" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-feature
            android:glEsVersion="0x00020000"
            android:required="true" />
        <application
            android:name=".App"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
         ...
      </application>
</manifest>

По логике вещей onCreate должен вызываться хоть раз. Но ни чего не происходит. Да же ставил точку останова.

Пробовал менять манифест так

<application
        android:name="com.uilmorcraft.uilmorlibrary.App"

или так

<application
        android:name="App"

эффекта ноль.

Создал новое приложение. Сделал все то же самое и о чудо. Все работает.

Проект большой и как-то тяжко весь код переносить из старого в новый проект ради рабочего класса Application. Но думаю что да же после переноса могу получить то же самое.

Может кто сталкивался с подобным?

Answer 1

InstantRun функция студии позволяет вам видеть изменения в приложении без его пересборки/перезапуска, что сокращает время разработки.

Но эта функция никогда не сможет работать во всех случаях. Например, если вы используете к-л либы, использующие кодогенерацию, типа Realm, Dagger etc изменения их использования не смогут быть отображены с помощью InstantRun, т.к. требуют пересборки приложения, чтобы в процессе этом сгенерировать новый код для компиляции.

Помимо упомянутых выше ограничений сам InstantRun далеко не идеален и может проигнорировать даже простейшие изменения. Т.е. вы можете поменять значение к-л переменной и потом часами пытаться понять почему ваш баг-фикс не исправил баг.

Таким образом все преимущества InstantRun-а полностью нивелируются тем, что ему нельзя доверять и его поведение непредсказуемо.

Вывод:

Не используйте InstantRun.

READ ALSO
Чётные числа в массиве

Чётные числа в массиве

Не могу разобраться, как в консоли вывести элементы массива: все чётные числа от 1 до 20Помогите, пожалуйста

312
Stringer Java Obfuscator подключить в Android Studio

Stringer Java Obfuscator подключить в Android Studio

Здравствуйте, взял триал такого продукта как "Stringer Java Obfuscator", но теперь битый час пытаюсь использовать его плагин stringer-gradle-pluginjar чтобы создавать...

363
Динамический перевод текста

Динамический перевод текста

Мне в приложении нужно динамически переводить текст с английского на русский, почитала, что есть Google Translate API, но он платный, есть какие-то...

182
Объясните про Collection и Map

Объясните про Collection и Map

Есть иерархия классов или что-то в этом роде

253