我的android应用程序显示keydispatching超时错误。每当我触摸屏幕时都不会发生这种情况。我在应用程序启动几秒钟后发生了。这是什么原因?我使用了4个图像视图,oncreate()。当我触摸imageview时,它必须通过GPRS从服务器下载图像。我在onCreate()方法中实现了主线程的完整操作。这是我的探索吗?我应该实现onStart(),onResume(),onPause(),onRestart()和onDestroy()方法吗?
答案 0 :(得分:3)
我相信你收到了ANR(App Not Responding)消息。
我建议你在单独的帖子中下载图片。使用AsyncTask执行此类下载任务&避免在主线程的onCreate()或任何其他生命周期方法中下载数据
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
检查链接http://developer.android.com/reference/android/os/AsyncTask.html
答案 1 :(得分:2)
你不能在UI线程中进行任何花费任何显着时间的处理(例如从网上下载一些东西),这就是调用所有方法的所有方法。
您必须将此部分功能移至服务中,或者在循环线程中执行此操作。
答案 2 :(得分:-1)
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); 的setContentView(R.layout.main);
dlgAlert = new AlertDialog.Builder(this);
// location = new Location(provider);
imView = (ImageView)findViewById(R.id.mapview);
zoomInView = (ImageView)findViewById(R.id.zoomin);
zoomOutView = (ImageView)findViewById(R.id.zoomout);
exitView = (ImageView)findViewById(R.id.exit);
imView.setOnTouchListener(new View.OnTouchListener(){ public boolean onTouch(视图视图,MotionEvent事件){ if(event.getAction()== MotionEvent.ACTION_DOWN){ //停止行动的操作 } else if(event.getAction()== MotionEvent.ACTION_UP){ //用于向上操作的操作 }