按Home键触发错误
我已经创建了一个图像编辑应用程序..它由两个活动组成,主要活动导致下一个活动。一切工作正常。问题是,当我在第二个活动中按HOME键时,它现在跳到主屏幕,当我再次运行应用程序时,它会生成一个错误以强制关闭。这在第一次活动期间没有发生。我无法找到确切的问题.. 有什么办法,如果用户按HOME键,我可以杀死该活动?按Home键触发错误
下面是surfaceview我使用的代码......它也使用线程...我想逸也正是DIS prblem正在兴起... u能请您检查出DIS
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) {
}
}
}
尝试该产品按键
@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);
}
HOME KEY如何与KEYCODE_BACK关联!我认为这是为BACK btn! – sat 2011-03-11 13:45:44
按HOME不会触发onKeyDown – 2012-01-31 21:28:51
在您的活动将这个杀人的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按钮也不会退出它。
thnx的答案,但它不工作......是有关表面视图和线程..? – user632905 2011-03-12 06:52:36
你的意思是什么不起作用?你的环境是什么? – 2011-03-12 11:17:50
它没有工作,因为你无法检测到家庭按键事件.. – user632905 2011-07-22 12:25:07
让我们知道当您将应用程序置于前台时您会得到什么异常。
发生这种情况时,您尚未重新初始化某些对象或变量。
您需要在onPause()方法中将共享首选项中变量的值保存为空值。您可以从SharedPrefs中获取这些值,并将它们分配回变量,或重新创建onResume()方法中为空的对象。
当Android在低内存上运行时,它在应用程序转到后台时会杀死一些活动或清除一些变量和对象。为什么你要好好照顾它,在的onPause()和的onResume()NMETHODS那...
希望它可以帮助...
这可能有这么多的具体原因,所以你应该张贴的例外是抛出和一些代码。从那个描述中不可能回答它。 – Chris 2011-03-11 13:41:17