该应用程序运行正常,但是在一段时间不活动后智能手机屏幕消失时,该应用程序将停止运行。当我按下按钮返回手机的主菜单时,它只是崩溃了(停止了)。
如果屏幕不熄灭,或者应用程序继续运行,我希望什么,或者如果屏幕熄灭时应用程序刚刚退出,那会很好。我就是不知道
非常感谢。
日志猫
12-14 21:47:07.526: E/AndroidRuntime(1111): FATAL EXCEPTION: main
12-14 21:47:07.526: E/AndroidRuntime(1111): Process: com.IceDriftGFS.icedrift, PID: 1111
12-14 21:47:07.526: E/AndroidRuntime(1111): java.lang.RuntimeException: Unable to pause activity {com.IceDriftGFS.icedrift/com.IceDriftGFS.icedrift.Main}: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.lang.Thread.join()' on a null object reference
12-14 21:47:07.526: E/AndroidRuntime(1111): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3225)
12-14 21:47:07.526: E/AndroidRuntime(1111): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3184)
12-14 21:47:07.526: E/AndroidRuntime(1111): at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3159)
12-14 21:47:07.526: E/AndroidRuntime(1111): at android.app.ActivityThread.access$1000(ActivityThread.java:144)
12-14 21:47:07.526: E/AndroidRuntime(1111): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296)
12-14 21:47:07.526: E/AndroidRuntime(1111): at android.os.Handler.dispatchMessage(Handler.java:102)
12-14 21:47:07.526: E/AndroidRuntime(1111): at android.os.Looper.loop(Looper.java:135)
12-14 21:47:07.526: E/AndroidRuntime(1111): at android.app.ActivityThread.main(ActivityThread.java:5221)
12-14 21:47:07.526: E/AndroidRuntime(1111): at java.lang.reflect.Method.invoke(Native Method)
12-14 21:47:07.526: E/AndroidRuntime(1111): at java.lang.reflect.Method.invoke(Method.java:372)
12-14 21:47:07.526: E/AndroidRuntime(1111): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
12-14 21:47:07.526: E/AndroidRuntime(1111): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
12-14 21:47:07.526: E/AndroidRuntime(1111): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.lang.Thread.join()' on a null object reference
12-14 21:47:07.526: E/AndroidRuntime(1111): at com.IceDriftGFS.icedrift.Main$Run.pause(Main.java:114)
12-14 21:47:07.526: E/AndroidRuntime(1111): at com.IceDriftGFS.icedrift.Main.onPause(Main.java:54)
12-14 21:47:07.526: E/AndroidRuntime(1111): at android.app.Activity.performPause(Activity.java:6044)
12-14 21:47:07.526: E/AndroidRuntime(1111): at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1294)
12-14 21:47:07.526: E/AndroidRuntime(1111): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3211)
12-14 21:47:07.526: E/AndroidRuntime(1111): ... 11 more
代码:
@SuppressLint("ClickableViewAccessibility")
public class Main extends Activity implements OnTouchListener{
Run run;
static float Xpos, Yinc;
static boolean actionDown = false;
static int x, y;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
run = new Run(this);
run.setOnTouchListener(this);
setContentView(run);
}
@Override
protected void onResume(){
super.onResume();
run.resume();
}
@Override
protected void onPause(){
super.onPause();
run.pause();
}
public class Run extends SurfaceView implements Runnable{
SurfaceHolder surfaceHolder;
Canvas canvas;
Thread thread = null;
boolean isRunning = true;
DisplayMetrics display;
Player player;
Background background;
Walls walls;
boolean plusCount = false;
public Run(Context context) {
super(context);
surfaceHolder = getHolder();
thread = new Thread(this);
thread.start();
display = context.getResources().getDisplayMetrics();
if(display.widthPixels > display.heightPixels){
Toast.makeText(context, "Your device is not compatible with this game", Toast.LENGTH_LONG).show();
}
player = new Player(context, display.widthPixels, display.heightPixels);
background = new Background(context, display.widthPixels, display.heightPixels);
walls = new Walls(context, display.widthPixels, display.heightPixels);
Xpos = display.widthPixels - display.widthPixels/6;
Yinc = display.heightPixels/280;
}
public void pause(){
isRunning = false;
while(true){
try{
thread.join();
}catch (InterruptedException e){
e.printStackTrace();
}
break;
}
thread = null;
}
public void resume(){
isRunning = true;
}
@Override
public void run() {
while(isRunning){
if(!surfaceHolder.getSurface().isValid())
continue;
canvas = surfaceHolder.lockCanvas();
try {
Thread.sleep((long) 16.6666666667);
} catch (InterruptedException e) {
e.printStackTrace();
}
background.run(canvas, Yinc);
player.run(canvas, Xpos, actionDown);
walls.run(canvas, Yinc);
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
x = (int) event.getX();
y = (int) event.getY();
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
actionDown = true;
Xpos = event.getX();
break;
case MotionEvent.ACTION_UP:
actionDown = false;
break;
}
return true;
}
}
要使屏幕始终显示,您可以锁定他。将其放在您的AndroidManifest.xml中:
<uses-permission android:name="android.permission.WAKE_LOCK" />
这样可以防止屏幕熄灭。
关于错误,您能否让我们看到logCat,我们将能够看到错误或代码,并且我们将能够了解发生了什么。
编辑:现在我们可以看到代码和错误了,我们可以看到您已经获得了NullPointerException。我认为您应该添加if(thread!= null),thrad.join()将在他的内部。请让我知道它是否有效:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句