按Home键会触发错误

时间:2011-03-11 13:33:51

标签: android

我创建了一个图像编辑应用程序..它由两个活动组成,主要活动导致下一个活动。一切都很好。问题是,当我在第二个活动期间按HOME键时,它现在跳转到主屏幕,当我再次运行应用程序时,它会生成错误以强制关闭。在第一次活动中执行相同操作时,不会发生这种情况。我无法找到确切的问题.. 有没有办法,如果用户按下HOME键我可以杀死该活动?

下面是我正在使用的surfaceview的代码...它也使用了一个线程...我认为数据是出现问题的地方......你可以查看dis out

public DrawingSurface(Context context, AttributeSet attrs) {
    super(context, attrs);

    getHolder().addCallback(this);

    commandManager = new CommandManager();
    da=new DrawingActivity();
    thread = new DrawThread(getHolder());
}


class DrawThread extends  Thread{
    private SurfaceHolder mSurfaceHolder;


    public DrawThread(SurfaceHolder surfaceHolder){
        mSurfaceHolder = surfaceHolder;

    }

    public void setRunning(boolean run) {
        _run = run;
    }


    @Override
    public void run() {
        Canvas canvas = null;
        b=da.getpic();

        while (_run){
            try{
                canvas = mSurfaceHolder.lockCanvas(null);
                if(mBitmap == null){
                    mBitmap =  Bitmap.createBitmap (1, 1, Bitmap.Config.ARGB_8888);;
                }
                final Canvas c = new Canvas (mBitmap);


                c.drawBitmap(b, 0, 0, null);
                commandManager.executeAll(c);

                canvas.drawBitmap (mBitmap, 0,  0,null); //first block

            } finally {
                mSurfaceHolder.unlockCanvasAndPost(canvas);
            }
        }

    }


}


public void addDrawingPath (DrawingPath drawingPath){
    commandManager.addCommand(drawingPath);
}

public boolean hasMoreRedo(){
    return commandManager.hasMoreRedo();
}

public void redo(){
    commandManager.redo();
}

public void undo(){
    commandManager.undo();
}

public boolean hasMoreUndo(){
    return commandManager.hasMoreRedo();
}
public Bitmap getBitmap(){

    return mBitmap;
}


public void surfaceChanged(SurfaceHolder holder, int format, int width,  int height) {

    mBitmap =  Bitmap.createBitmap (width, height, Bitmap.Config.ARGB_8888);

}

public void surfaceCreated(SurfaceHolder holder) {

    thread.setRunning(true);
    thread.start();

}

public void surfaceDestroyed(SurfaceHolder holder) {
    boolean retry = true;
    thread.setRunning(false);
    while (retry) {
        try {
            thread.join();
            retry = false;
        } catch (InterruptedException e) {

        }
    }
}

3 个答案:

答案 0 :(得分:0)

将此项添加到您的活动中以终止按HOME键

上的应用程序
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_HOME) {
        android.os.Process.killProcess(android.os.Process.myPid());
    }
    return true;
}

奇怪的是,即使是BACK按钮也不会退出。

答案 1 :(得分:0)

当您将应用程序带到前台时,请告诉我们您会得到什么异常。

当您没有重新初始化某些对象或变量时会发生这种情况。

您需要在onPause()方法中将共享首选项中变量的值保存为null。您可以从SharedPrefs获取这些值,并将它们分配回变量或重新创建onResume()方法中为null的对象。

当Android在低内存上运行时,它会在应用程序转到后台时杀死一些活动,或清除一些变量和对象。这就是为什么你需要在onPause()和onResume()方法中处理它...

希望它有所帮助...

答案 2 :(得分:-3)

尝试使用主页按键

    @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        Intent i = new Intent();
        i.setClass(Activity1.this, Activity2.class);
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(i);

        return true;
    }
    return super.onKeyDown(keyCode, event);
}