我创建了一个图像编辑应用程序..它由两个活动组成,主要活动导致下一个活动。一切都很好。问题是,当我在第二个活动期间按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) {
}
}
}
答案 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);
}