1
내 응용 프로그램에서 하드웨어 볼륨 키를 누르면 토스트가 현재 볼륨으로 표시됩니다. 일이 대부분 잘 진행됩니다. 그러나 볼륨 키를 길게 누르면 응용 프로그램이 손상됩니다.토스트 충돌 응용 프로그램
....
11-19 06:43:22.114 I/NotificationService(2783): enqueueToast pkg=com.FunTime.android [email protected] duration=0
11-19 06:43:22.119 V/WindowManager(2783): Delivering key 25 to Window{47f6a930 com.FunTime.android/com.FunTime.android.map.MapActivity paused=false}
11-19 06:43:22.164 I/NotificationService(2783): enqueueToast pkg=com.FunTime.android [email protected]0 duration=0
11-19 06:43:22.169 V/WindowManager(2783): Delivering key 25 to Window{47f6a930 com.FunTime.android/com.FunTime.android.map.MapActivity paused=false}
11-19 06:43:22.209 I/NotificationService(2783): enqueueToast pkg=com.FunTime.android [email protected] duration=0
...many such notifications...
11-19 06:43:22.244 E/SurfaceFlinger(2783): createSurface() failed, generateId = -12
11-19 06:43:22.244 W/WindowManager(2783): OutOfResourcesException creating surface
11-19 06:43:22.244 I/WindowManager(2783): Out of memory for surface! Looking for leaks...
11-19 06:43:22.244 W/WindowManager(2783): No leaked surfaces; killing applicatons!
11-19 06:43:22.244 W/ActivityManager(2783): Killing processes for memory at adjustment 0
11-19 06:43:22.244 W/ActivityManager(2783): Killing for memory: ProcessRecord{47dd75c8 3246:com.FunTime.android/10079} (adj 0)
11-19 06:43:22.244 I/Process (2783): Sending signal. PID: 3246 SIG: 9
11-19 06:43:22.244 W/WindowManager(2783): Looks like we have reclaimed some memory, clearing surface for retry.
11-19 06:43:22.244 W/WindowManager(2783): Due to memory failure, waiting a bit for next layout
내가 따라 접근 방식 : 을 나는 토스트 개체가 있고 키를 누를 때마다 이벤트가 나는보기를 팽창으로 감지 위해, 내보기 요소를 설정 토스트로 설정 다음과 같은 로그가 충돌에서 생성 된입니다 축배를 보여줘.
어떤 아이디어가 잘못 되었나요? 내 모든 활동이 상속되는 기본 활동 클래스 덧 씌워져 편집
:
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode==KeyEvent.KEYCODE_VOLUME_DOWN)
{
myAudioManager.getInstance().onVolumeDown();
myAudioManager.getInstance().showVolumeAdjustment(myAudioManager.getInstance().getVolume());
return true;
}
else if(keyCode==KeyEvent.KEYCODE_VOLUME_UP)
{
myAudioManager.getInstance().onVolumeUp();
myAudioManager.getInstance().showVolumeAdjustment(myAudioManager.getInstance().getVolume());
return true;
}
return super.onKeyDown(keyCode, event);
}
myAudioManager
public void showVolumeAdjustment(final int adjustment)
{
volumeToast.setDuration(Toast.LENGTH_SHORT);
volumeToast.setView(getVolumeProgressBarView(adjustment));
volumeToast.setGravity(Gravity.TOP,0,0);
volumeToast.show();
}
private View getVolumeProgressBarView(int adjustment)
{
LayoutInflater inflater = (LayoutInflater) myApplication.getInstance().getApplicationContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
toastView= inflater.inflate(R.layout.volume_toast, null);
ProgressBar pb =(ProgressBar)toastView.findViewById(R.id.level);
pb.setMax(MAX_VOICE_VOLUME_ENGINE);
pb.setProgress(adjustment);
return toastView;
}
키 프레스 이벤트 처리기 설정 방법 및 축배 표시 방법을 보여주는 코드를 게시해야합니다. 실제로하는 일을 보지 않고 무엇을 잘못하고 있는지 말하기는 어렵습니다. – Nailuj