Почему мое приложение запускается дважды? - PullRequest
0 голосов
/ 05 июня 2018

Мое приложение работает хорошо, но теперь оно запускается, а затем через несколько секунд запускается снова.
сначала: показать splashactivity, а затем активность входа в систему

Вот коды моего проекта:

Манифест:

 <application
        android:name=".Adjust.GlobalApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:launchMode="singleTask"
        android:screenOrientation="portrait"
        android:supportsRtl="false"
        android:theme="@style/AppTheme.NoActionBar">
        <activity
            android:name=".Activity.SplashActivity"
            android:theme="@style/Transparet">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Activity.LoginActivity"
            android:label="@string/title_activity_login"
            android:screenOrientation="portrait" />
        <activity
            android:name=".Activity.GetActiveCodeActivity"
            android:screenOrientation="portrait" />

        <meta-data
            android:name="firebase_messaging_auto_init_enabled"
            android:value="false" />
        <meta-data android:name="com.onesignal.NotificationOpened.DEFAULT" android:value="DISABLE" />

        <service
            android:name=".Services.RestService"
            android:screenOrientation="portrait" />

        <activity
            android:name=".Activity.WalletRechargeActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".Activity.MainActivity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustPan" />
        <activity
            android:name=".Activity.BillsActivity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustPan" />
        <activity
            android:name=".Activity.TransferActivity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustResize|stateHidden" />
        <activity
            android:name=".Activity.BuyChargeActivity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustPan" />
        <activity
            android:name=".Activity.TransferConfirmationActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".Activity.RegisterEventActivity"
            android:screenOrientation="portrait" />
        <activity android:name="com.soundcloud.android.crop.CropImageActivity" />
        <activity
            android:name=".Activity.CharityActivity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustResize|stateHidden" />
        <activity
            android:name=".Activity.AddGroupTransferActivity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateAlwaysVisible" />
        <activity
            android:name=".Activity.EditProfileActivity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden|adjustResize" />
        <activity android:name=".Activity.ScanQrActivity" />
        <activity android:name=".Activity.InvitationActivity" />
        <activity
            android:name=".Activity.BuyInternetActivity"
            android:windowSoftInputMode="adjustPan" />

        <activity android:name=".Activity.SetPayPassActivity" />
        <activity android:name=".Activity.PaymentResult">
            <intent-filter>
                <action android:name="android.intent.action." />

                <data
                    android:host="example"
                    android:scheme="example" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>
        </activity>
        <activity android:name=".Activity.UpdateActvity" />
        <activity android:name=".Activity.WebView" />
        <activity android:name=".Activity.MagicMessage" />
        <activity android:name=".Activity.ContactActivity"></activity>
    </application>

SplashActivity

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(getResources().getColor(R.color.status));
        }

        linearLayout_init = findViewById(R.id.linearLayout_init);
        //animate login view
        linearLayout_init.setVisibility(View.GONE);
        Animation animTranslate  = AnimationUtils.loadAnimation(SplashActivity.this, R.anim.translate);
        animTranslate.setAnimationListener(new Animation.AnimationListener() {

            @Override
            public void onAnimationStart(Animation arg0) { }

            @Override
            public void onAnimationRepeat(Animation arg0) { }

            @Override
            public void onAnimationEnd(Animation arg0) {
                linearLayout_init.setVisibility(View.VISIBLE);
                Animation animFade  = AnimationUtils.loadAnimation(SplashActivity.this, R.anim.fade);
                linearLayout_init.startAnimation(animFade);
            }
        });
        ImageView imgLogo = findViewById(R.id.img_kipologo);
        imgLogo.startAnimation(animTranslate);

        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {


                getSharedPreference();

            }
        }, 3000);

    }

    public void getSharedPreference(){

        SharedPreferences sharedPreferences = getSharedPreferences("example", MODE_PRIVATE);
        String isLogin = sharedPreferences.getString("mobileN", null);

        if(isLogin != null )
        {
            Intent intent = new Intent(SplashActivity.this, MainActivity.class);
            startActivity(intent);
            SplashActivity.this.finish();
        } else {
            Intent myIntent;
            myIntent = new Intent(SplashActivity.this, LoginActivity.class);
            startActivity(myIntent);
            SplashActivity.this.finish();
        }
    }

Я использую Preference из-за того, что пользователь, вошедший в систему, прежде чем приложение не перейдет к активности входа снова

В моей отладке кажется, что SpalshActivity запускается много раз, и я не знаю почему!

1 Ответ

0 голосов
/ 05 июня 2018

В этой теме

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            getSharedPreference();
        }
    }, 3000);
}

Проблема:
В настоящее время у вас задержка в миллисекундах 3000. После выполнения вашего метода getSharedPreference() ваше приложение будетпереход к следующей деятельности с использованием намерения.Однако, в то же время, ваша активность splashScreen пытается сохранить свое состояние на переднем плане, потому что она принудительно ждет 3 секунды, прежде чем делать то, что должна, поэтому вы в конечном итоге вызываете / отображаете SplashScreen Activity более одного,

Исправление:
Один из способов обойти это - не иметь никакой задержки и просто выполнить свой метод getSharedPreference () в потоке без таймера.

Например: вы можете использовать:

Runnable runnable = new Runnable() {
                @Override
                public void run() {
                  //Do work here
                }
            };
            new Thread(runnable).start();

Примечание на стороне:
Вам не нужно принудительно завершать свою деятельность SplashScreen, используя SplashActivity.this.finish();.Деятельность будет уничтожена сама по себе, когда это необходимо.Только если у вас есть проблемы с памятью и вы хотите немедленно освободить некоторые пробелы, но это не так в этом примере.

...