- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试在具有 ProgressDialog 的 fragment 中运行 AsyncTask,我已在其他 Activity 中多次执行此操作,但当我在 fragment 中尝试相同操作时,它会因内存泄漏而崩溃。我知道造成这种情况的原因与 ProgressDialog 有关,但我似乎无法弄清楚如何正确执行此操作。
异步任务:
private void startNewAsyncTask() {
NetCheck asyncTask = new NetCheck();
asyncTask.execute();
}
private class NetCheck extends AsyncTask<String, String, Boolean>
{
private ProgressDialog nDialog;
protected void onPreExecute(){
super.onPreExecute();
nDialog = new ProgressDialog(getActivity());
nDialog.setTitle("Checking Network");
nDialog.setMessage("Loading..");
nDialog.setIndeterminate(false);
nDialog.setCancelable(true);
nDialog.show();
}
protected Boolean doInBackground(String... args){
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null && ni.isConnected()){
try {
URL url = new URL("http://www.google.com");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setConnectTimeout(4000);
urlc.connect();
if (urlc.getResponseCode() == 200){
return true;
}
}catch (MalformedURLException e1){
e1.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
}
return false;
}
protected void onPostExecute(Boolean th){
if(th == true){
nDialog.dismiss();
}
else{
nDialog.dismiss();
errorMessage.setText("Error connecting to network");
}
}
错误日志:
03-25 10:53:58.074: E/WindowManager(4549): Activity com.gmail.lucsantisf.software_project.views.ProfileView has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41d2cba8 that was originally added here
03-25 10:53:58.074: E/WindowManager(4549): android.view.WindowLeaked: Activity com.gmail.lucsantisf.software_project.views.ProfileView has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41d2cba8 that was originally added here
03-25 10:53:58.074: E/WindowManager(4549): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:418)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:294)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:226)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:151)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.Window$LocalWindowManager.addView(Window.java:547)
03-25 10:53:58.074: E/WindowManager(4549): at android.app.Dialog.show(Dialog.java:277)
03-25 10:53:58.074: E/WindowManager(4549): at com.gmail.lucsantisf.software_project.fragments.ProfilePhotosFragment$NetCheck.onPreExecute(ProfilePhotosFragment.java:70)
03-25 10:53:58.074: E/WindowManager(4549): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
03-25 10:53:58.074: E/WindowManager(4549): at android.os.AsyncTask.execute(AsyncTask.java:534)
03-25 10:53:58.074: E/WindowManager(4549): at com.gmail.lucsantisf.software_project.fragments.ProfilePhotosFragment.startNewAsyncTask(ProfilePhotosFragment.java:55)
03-25 10:53:58.074: E/WindowManager(4549): at com.gmail.lucsantisf.software_project.fragments.ProfilePhotosFragment.onCreateView(ProfilePhotosFragment.java:49)
03-25 10:53:58.074: E/WindowManager(4549): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
03-25 10:53:58.074: E/WindowManager(4549): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
03-25 10:53:58.074: E/WindowManager(4549): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
03-25 10:53:58.074: E/WindowManager(4549): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
03-25 10:53:58.074: E/WindowManager(4549): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
03-25 10:53:58.074: E/WindowManager(4549): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
03-25 10:53:58.074: E/WindowManager(4549): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
03-25 10:53:58.074: E/WindowManager(4549): at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
03-25 10:53:58.074: E/WindowManager(4549): at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
03-25 10:53:58.074: E/WindowManager(4549): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.View.measure(View.java:15264)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4916)
03-25 10:53:58.074: E/WindowManager(4549): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390)
03-25 10:53:58.074: E/WindowManager(4549): at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
03-25 10:53:58.074: E/WindowManager(4549): at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.View.measure(View.java:15264)
03-25 10:53:58.074: E/WindowManager(4549): at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1196)
03-25 10:53:58.074: E/WindowManager(4549): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-25 10:53:58.074: E/WindowManager(4549): at android.widget.ScrollView.onMeasure(ScrollView.java:318)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.View.measure(View.java:15264)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4916)
03-25 10:53:58.074: E/WindowManager(4549): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.View.measure(View.java:15264)
03-25 10:53:58.074: E/WindowManager(4549): at android.widget.LinearLayout.measureVertical(LinearLayout.java:833)
03-25 10:53:58.074: E/WindowManager(4549): at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.View.measure(View.java:15264)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4916)
03-25 10:53:58.074: E/WindowManager(4549): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-25 10:53:58.074: E/WindowManager(4549): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2339)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.View.measure(View.java:15264)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2131)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1242)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1435)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1127)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4606)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:747)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.Choreographer.doCallbacks(Choreographer.java:567)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.Choreographer.doFrame(Choreographer.java:536)
03-25 10:53:58.074: E/WindowManager(4549): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:733)
03-25 10:53:58.074: E/WindowManager(4549): at android.os.Handler.handleCallback(Handler.java:615)
03-25 10:53:58.074: E/WindowManager(4549): at android.os
有人知道我做错了什么吗?
感谢您的帮助!
最佳答案
您正在调用 fragment 的 onCreateView()
中的 show()
方法。该 fragment 尚未通过其 onResume()
回调,因此它没有可供进度对话框使用的有效窗口,因此这种不匹配会导致泄漏。将 AsyncTask
的开头移动到 fragment 的 onResume()
方法中,这应该可以解决问题。
关于android - Fragment 中 AyncTask 中的 ProgressDialog(崩溃),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22632228/
当用户点击登录按钮时,我想在我的应用程序中使用 ProgressDialog。我遇到的问题是未找到 ProgressDialog - AS 中的红色文本。我错过了什么图书馆吗? 渐变 compile
我使用进度条创建了自定义进度对话框,但自定义进度对话框中的进度消息没有更新 最佳答案 您可以使用 ProgressBar实现相同的行为进度对话框 CustomProgressBar progressB
给出下面的代码。我想将标题“请等待调用被激活”转换为印地语(我在 Assets 文件夹中提供的字体).. public ShakeEventsListener(Context context, OnS
当我的设备是 4.4.4 时,我的 ProgressDialog 工作正常,我最近没有使用这个应用程序,同时设备升级到 Lillipop。我不确定这是否对这个问题造成了任何影响,只是提一下。 问题 1
ProgressDialog 在我的代码中添加 progressDialog.dismiss() 方法时无法显示 我还尝试添加Thread.sleep(),以便它的执行将 hibernate 一段时间
我只是想创建一个旋转的进度对话框。没有文字,没有边框,没有背景。只是一个旋转的通知,轻轻地位于内容顶部的屏幕中心。 我在创建这个自定义对话框时看到了两个不同的 Stack Overflow 问题。 他
我的意思是,ProgressDialog 静态方法 show() 的返回值与该类实例的非静态方法 show 之间有什么区别? 有什么理由选择这种策略 ProgressDialog pd = new P
我在进程运行时使用 ProgressDialog 时遇到问题。我已经尝试了所有可能的不正确方法,并查看了许多网站,这些网站提供了我正在尝试做的事情的示例,但是,我仍然遇到了线程在 ProgressDi
我开发了一个 Flutter 应用程序,我使用了 ProgressDialog小部件 ( progress_dialog: ^1.2.0 )。首先,我展示了 ProgressDialog小部件和一些代
在应用程序中创建ProgressDialog时,出现BadTokenException错误。我尝试阅读有关该问题的几篇文章,但我仍然无法真正弄清这是什么原因。单击按钮后,我调用对话框函数。 p
以下是我的代码: public void onClick(View view) { dialog=new ProgressDialog(view.getContext());
我有一个进度对话框,可以工作,但不符合我的外部需求: 我想把它做成这样: 我尝试过的: 1 - 主题化(仅使用样式和样式+主题方法),如此处所述 结果很糟糕(我在对话框周围有一个相同的蓝色边框颜色和标
我正在尝试从互联网获取数据,解析它,然后将数据显示给用户。该操作通常需要 3 秒左右,我希望旋转进度对话框显示一条消息,说明我正在加载数据。问题是 ProgressDialog 仅在加载即将完成时才显
我制作了一个食谱应用程序,我一直在解决一些问题,因为我无法运行该应用程序,但似乎每次修复错误时都会出现另一个错误,我的项目无法解决方法解雇()我不知道该怎么办,我已经根据 Youtube channe
我想从外部类中显示当前 Activity 的 ProgressDialog,而不是将变量传递到外部类或像其他已回答的问题一样使用静态变量。是否可以?这是一些简单的测试代码,可能有助于说明我想要做什么:
在“onCreate”中,我正在从网络下载数据。下载数据的持续时间为 10 秒。我不想在下载数据时使用 ProgressDialog。这是我的代码,但 ProgressDialog 没有出现: pub
我的应用程序正在从网络服务器加载一些数据。这次我想要一个进度对话框以避免应用程序用户出现黑屏。 Button ok = (Button) findViewById(R.id.ok);
我在我的 android 应用程序中创建了一个 ProgressDialog。但我遇到的问题是在它实际完成工作时停止旋转轮子。这是我的代码。我怎样才能让它在我进行其他工作时不断旋转轮子? button
我能做到: ((Activity) mContext).setProgressBarIndeterminateVisibility(true); 但不是这个: ((Activity) mConte
我想从服务内的线程增加一个进度对话框,我真的很难做到,这是我的代码,请帮助我。 我尝试了很多不同的方法,包括 asyncTask(我遇到了上下文问题)并尝试使用静态函数但它无法正常工作,我是 andr
我是一名优秀的程序员,十分优秀!