在onCreate之后调用Android onStop onDestroy

用户名

我希望你能帮助我。我不明白为什么这会发生在我身上。

我的应用在调用onCreate()之后立即调用onPause(),onStop(),onDestroy()。屏幕是黑色的。当我按下主页按钮时,将调用onPause(),onStop(),onRestart(),onStart()和onResume(),一切都很好。这仅在我的真实设备(xperia z2,kitkat 4.4.2)上发生。在我的平板电脑(galaxy tab3、4.x)和许多其他模拟器上,这永远不会发生。

你们有解决这个问题的办法吗?非常感谢你。

这是Logcat:

05-07 16:16:32.882: I/System.out(5149): onstart() called
05-07 16:16:32.882: I/System.out(5149): onresume() called
05-07 16:16:32.902: I/System.out(5149): onpause() called
05-07 16:16:32.902: I/System.out(5149): onstop() called
05-07 16:16:32.902: I/System.out(5149): ondestroy() called
05-07 16:16:33.002: D/dalvikvm(5149): GC_FOR_ALLOC freed 14423K, 28% free 59061K/80924K, paused 13ms, total 13ms
05-07 16:16:33.012: I/dalvikvm-heap(5149): Grow heap (frag case) to 72.570MB for 14745616-byte allocation
05-07 16:16:33.032: D/dalvikvm(5149): GC_FOR_ALLOC freed 9K, 10% free 73452K/80924K, paused 13ms, total 13ms
05-07 16:16:33.052: I/dalvikvm-heap(5149): Grow heap (frag case) to 79.953MB for 7750096-byte allocation
05-07 16:16:34.012: I/System.out(5149): onstart() called
05-07 16:16:34.012: I/System.out(5149): onresume() called
05-07 16:16:34.022: I/Choreographer(5149): Skipped 67 frames!  The application may be doing too much work on its main thread.
05-07 16:16:34.072: I/Adreno-EGL(5149): <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build:  ()
05-07 16:16:34.072: I/Adreno-EGL(5149): OpenGL ES Shader Compiler Version: E031.24.00.06
05-07 16:16:34.072: I/Adreno-EGL(5149): Build Date: 02/12/14 Wed
05-07 16:16:34.072: I/Adreno-EGL(5149): Local Branch: au090
05-07 16:16:34.072: I/Adreno-EGL(5149): Remote Branch: 
05-07 16:16:34.072: I/Adreno-EGL(5149): Local Patches: 
05-07 16:16:34.072: I/Adreno-EGL(5149): Reconstruct Branch: 
05-07 16:16:34.162: D/OpenGLRenderer(5149): Enabling debug mode 0
05-07 16:16:34.242: I/ActivityManager(5149): Timeline: Activity_idle id: android.os.BinderProxy@447d2510 time:107086183
05-07 16:16:34.242: I/ActivityManager(5149): Timeline: Activity_idle id: android.os.BinderProxy@447d2510 time:107086183
05-07 16:17:02.702: I/System.out(5149): onpause() called
05-07 16:17:03.232: W/IInputConnectionWrapper(5149): showStatusIcon on inactive InputConnection
05-07 16:17:03.292: I/System.out(5149): onstop() called
05-07 16:17:04.452: I/System.out(5149): onrestart() called
05-07 16:17:04.452: I/System.out(5149): onstart() called
05-07 16:17:04.452: I/System.out(5149): onresume() called

编辑:那是所有的logcat抛出。我刚刚发现,当我将设备放在横向时,它不会调用onDestroy()。

我实现了:

@Override
public void onConfigurationChanged(Configuration newConfig) 
{
    super.onConfigurationChanged(newConfig);
}

和android:configChanges =“ orientation | keyboardHidden”

...但是仍然有同样的问题。

代码:

package com.example.x;

import java.util.HashMap;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import com.google.android.gms.ads.*;

public class GameActivity extends Activity {

    private static InterstitialAd interstitial;
    private AdView adView;
    private GameView theGameView;
    private static SoundPool soundPool;
    private static HashMap<Integer, Integer> soundsMap;
    static int SOUND1=1;
    static int SOUND2=2; 
    static int SOUND3=3; 
    static int SOUND4=4; 
    static int SOUND5=5; 
    static int SOUND6=6; 
    static int SOUND7=7; 
    static int SOUND8=8; 
    static int SOUND9=9; 
    static int SOUND10=10; 
    static int SOUND11=11; 
    static int SOUND12=12; 
    static int SOUND13=13; 
    static int SOUND14=14; 
    static int SOUND15=15; 
    static int SOUND16=16; 
    static int SOUND17=17; 
    static int SOUND18=18; 
    static int SOUND19=19; 
    static int SOUND20=20; 
    static int SOUND21=21; 
    static int SOUND22=22; 
    static int SOUND23=23; 
    static int SOUND24=24; 
    static int SOUND25=25; 
    static int SOUND26=26; 
    static int SOUND27=27; 
    static int SOUND28=28; 
    static float soundVol;


    @SuppressLint("UseSparseArrays")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                WindowManager.LayoutParams.FLAG_FULLSCREEN
                );

        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 


        theGameView = new GameView(this);

        RelativeLayout layout = new RelativeLayout(this);
        adView = new AdView(this);
         adView.setAdUnitId("x");
         adView.setAdSize(AdSize.SMART_BANNER);
         adSetXY(0, GameView.getHeight-GameView.FieldHeight-GameView.FieldHeight/3);
         layout.addView(theGameView);
         layout.addView(adView);
        setContentView(layout);





         soundPool = new SoundPool(15, AudioManager.STREAM_MUSIC, 100);
            soundsMap = new HashMap<Integer, Integer>();

            soundsMap.put(SOUND1, soundPool.load(this, R.raw.click, 1));
            soundsMap.put(SOUND2, soundPool.load(this, R.raw.mpupgradetower, 1));
            soundsMap.put(SOUND3, soundPool.load(this, R.raw.stower1, 1));
            soundsMap.put(SOUND4, soundPool.load(this, R.raw.stower2, 1));
            soundsMap.put(SOUND5, soundPool.load(this, R.raw.stower3, 1));
            soundsMap.put(SOUND6, soundPool.load(this, R.raw.stower4, 1));
            soundsMap.put(SOUND7, soundPool.load(this, R.raw.stower5, 1));
            soundsMap.put(SOUND8, soundPool.load(this, R.raw.stower6, 1));
            soundsMap.put(SOUND9, soundPool.load(this, R.raw.stower7, 1));
            soundsMap.put(SOUND10, soundPool.load(this, R.raw.stower8, 1));
            soundsMap.put(SOUND11, soundPool.load(this, R.raw.stower9, 1));
            soundsMap.put(SOUND12, soundPool.load(this, R.raw.sspecial1, 1));
            soundsMap.put(SOUND13, soundPool.load(this, R.raw.sspecial2, 1));
            soundsMap.put(SOUND14, soundPool.load(this, R.raw.senemy1, 1));
            soundsMap.put(SOUND15, soundPool.load(this, R.raw.senemy2, 1));
            soundsMap.put(SOUND16, soundPool.load(this, R.raw.senemy3, 1));
            soundsMap.put(SOUND17, soundPool.load(this, R.raw.senemy4, 1));
            soundsMap.put(SOUND18, soundPool.load(this, R.raw.senemy5, 1));
            soundsMap.put(SOUND19, soundPool.load(this, R.raw.senemy6, 1));
            soundsMap.put(SOUND20, soundPool.load(this, R.raw.senemy7, 1));
            soundsMap.put(SOUND21, soundPool.load(this, R.raw.senemy8, 1));
            soundsMap.put(SOUND22, soundPool.load(this, R.raw.senemy9, 1));
            soundsMap.put(SOUND23, soundPool.load(this, R.raw.sspecial, 1));
            soundsMap.put(SOUND24, soundPool.load(this, R.raw.gameover, 1));
            soundsMap.put(SOUND25, soundPool.load(this, R.raw.swater, 1));
            soundsMap.put(SOUND26, soundPool.load(this, R.raw.stree, 1));
            soundsMap.put(SOUND27, soundPool.load(this, R.raw.sfastattack, 1));
            soundsMap.put(SOUND28, soundPool.load(this, R.raw.sleben, 1));



         // Create the interstitial.
            interstitial = new InterstitialAd(this);
            interstitial.setAdUnitId("x");

            // Create ad request.
            AdRequest adRequest = new AdRequest.Builder()
                    .addTestDevice("B3EEABB8EE11C2BE770B684D95219ECB")
                    .addTestDevice("24610EF96304719510A4C412F8731837")
                    .addTestDevice("CAF0B70544C63E4A52F697BBF35A5BCA")
                    .build();

            // Begin loading your interstitial.
            interstitial.loadAd(adRequest);


             // Initiate a generic request.
             AdRequest adRequest2 = new AdRequest.Builder()
            .addTestDevice("B3EEABB8EE11C2BE770B684D95219ECB")
            .addTestDevice("24610EF96304719510A4C412F8731837")
            .addTestDevice("CAF0B70544C63E4A52F697BBF35A5BCA")      
            .build();

             // Load the adView with the ad request.
             adView.loadAd(adRequest2);


    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) 
    {
        super.onConfigurationChanged(newConfig);
    }

    public void adLoad()
    {
        runOnUiThread(new Runnable() {
             @Override
             public void run() {

                 if(adView != null) {
                    adView.setEnabled(true);
                    adView.setVisibility(View.VISIBLE);
                    adView.resume();
                 }
            }
        });

    }

    public void adDestroy()
    {
        runOnUiThread(new Runnable() {
             @Override
             public void run() {

                 if(adView != null) {
                    adView.setEnabled(false);
                    adView.setVisibility(View.GONE);
                    adView.pause();
                 }
            }
        });

    }

    public void adSetXY(float x, float y)
    {
         adView.setX(x);
         adView.setY(y);
    }


    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("onstart() called");
    //  GameView.pause=true;
    }

    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("onpause() called");
        GameView.pause=false;
        GameLoopThread.paused=true;
    }

    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("onstop() called");
    }

    @Override
    protected void onDestroy() {
        adView.destroy();
        System.out.println("ondestroy() called");
        super.onDestroy();
    //  GameView.pause=true;
    }
    @Override
    protected void onResume() {
        super.onResume();
        System.out.println("onresume() called");
        GameLoopThread.unpaused=true;
    }
    @Override
    protected void onRestart() {
        System.out.println("onrestart() called");
        super.onRestart();
    //  GameView.pause=true;
    }


    public static void displayInterstitial() {
        if (interstitial.isLoaded()) {
          interstitial.show();
        }
      }

}
DigCamara

setRequestedOrientation开始进行“活动”(onCreate)时就呼唤风景文档说明

更改此活动的所需方向。如果活动当前处于前台或以其他方式影响屏幕方向,则屏幕将立即更改(可能导致活动重新启动)。否则,下次活动可见时将使用此功能。

所以...您很高兴看到您的Activity的预期行为。

如果您想将屏幕锁定为横向模式,则可以这样处理:

<activity android:name="GameActivity "
android:screenOrientation="landscape"
android:configChanges="keyboardHidden|orientation|screenSize">

</activity>

这样可以防止屏幕配置更改触发您提到的事件。

http://developer.android.com/reference/android/app/Activity.html#setRequestedOrientation(int)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将在onStop之后调用onCreate而不在中间调用onDestroy

来自分类Dev

Android onDestroy和Onstop无法保证被调用

来自分类Dev

onStop与onDestroy

来自分类Dev

延迟后如何从onStop()调用onDestroy()

来自分类Dev

在不使用onpause()或onstop()的情况下调用ondestroy()的Android场景

来自分类Dev

在onStop()之后调用的Android onPause()

来自分类Dev

onStop()和onDestroy()可能不会被调用。他们有什么好处?

来自分类Dev

何时注销BroadcastReceiver?在onPause(),onDestroy()或onStop()中?

来自分类Dev

片段 onStop() 与 onDetach()、onDestroy() 或 onDestroyView() 相同?

来自分类Dev

不再调用onDestroy之后的Android片段onCreateView

来自分类Dev

onSaveInstanceState()应该在onDestroy()中,而不是onStop()中?

来自分类Dev

如果 Activity 在 onCreate() 之后但在 onStart() 之前结束,则调用什么来代替 onStop()?

来自分类Dev

在调用onDestroy()之后重用Fragment是否安全?

来自分类Dev

相机意图调用onDestroy()

来自分类Dev

OnDestroy()被多次调用

来自分类Dev

在onStop()或super.onStop()返回之后Activity是否可杀死

来自分类Dev

将setResult放在onPause(),onStop()或onDestroy()中时,startActivityForResult不能正常工作

来自分类Dev

Android停止线程onDestroy

来自分类Dev

Android停止线程onDestroy

来自分类Dev

android:如何处理onStop方法调用

来自分类Dev

android:如何处理onStop方法调用

来自分类Dev

在onDestroy之后保持线程运行

来自分类Dev

Android Studio onStop()中的数组

来自分类Dev

当MainAcitivty调用onDestroy()时如何调用所有活动onDestroy()?

来自分类Dev

Android中带有EditText的onStop之后的onFocusChangeListener事件

来自分类Dev

即使在处置了 CompositeDisposable onDestroy 之后,也会调用 RxJava2 Android onNext

来自分类Dev

在调用onDestroy()方法之后,Activity实例是否真的被破坏了?

来自分类Dev

在onDestroy之后,将重新调用生命周期回调

来自分类Dev

在onCreate / onDestroy上注册/注销BroadcastReceiver

Related 相关文章

  1. 1

    将在onStop之后调用onCreate而不在中间调用onDestroy

  2. 2

    Android onDestroy和Onstop无法保证被调用

  3. 3

    onStop与onDestroy

  4. 4

    延迟后如何从onStop()调用onDestroy()

  5. 5

    在不使用onpause()或onstop()的情况下调用ondestroy()的Android场景

  6. 6

    在onStop()之后调用的Android onPause()

  7. 7

    onStop()和onDestroy()可能不会被调用。他们有什么好处?

  8. 8

    何时注销BroadcastReceiver?在onPause(),onDestroy()或onStop()中?

  9. 9

    片段 onStop() 与 onDetach()、onDestroy() 或 onDestroyView() 相同?

  10. 10

    不再调用onDestroy之后的Android片段onCreateView

  11. 11

    onSaveInstanceState()应该在onDestroy()中,而不是onStop()中?

  12. 12

    如果 Activity 在 onCreate() 之后但在 onStart() 之前结束,则调用什么来代替 onStop()?

  13. 13

    在调用onDestroy()之后重用Fragment是否安全?

  14. 14

    相机意图调用onDestroy()

  15. 15

    OnDestroy()被多次调用

  16. 16

    在onStop()或super.onStop()返回之后Activity是否可杀死

  17. 17

    将setResult放在onPause(),onStop()或onDestroy()中时,startActivityForResult不能正常工作

  18. 18

    Android停止线程onDestroy

  19. 19

    Android停止线程onDestroy

  20. 20

    android:如何处理onStop方法调用

  21. 21

    android:如何处理onStop方法调用

  22. 22

    在onDestroy之后保持线程运行

  23. 23

    Android Studio onStop()中的数组

  24. 24

    当MainAcitivty调用onDestroy()时如何调用所有活动onDestroy()?

  25. 25

    Android中带有EditText的onStop之后的onFocusChangeListener事件

  26. 26

    即使在处置了 CompositeDisposable onDestroy 之后,也会调用 RxJava2 Android onNext

  27. 27

    在调用onDestroy()方法之后,Activity实例是否真的被破坏了?

  28. 28

    在onDestroy之后,将重新调用生命周期回调

  29. 29

    在onCreate / onDestroy上注册/注销BroadcastReceiver

热门标签

归档