- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有点卡住了。我的应用程序中有一项 Activity 无法完成,因为它卡住了主 ui 线程。我可以在 log cat 中看到,因为它长时间没有响应,以至于它会杀死整个应用程序并关闭……这太糟糕了。
所以....我从一个菜单启动这个过程,我通过调用一个 Intent 来启动它......基本的东西。但是我正在调用的 Activity 是查询手机内部和外部的所有图像文件。我尝试在内部类中使用 AsyncTask
,但这只是我对如何正确执行它的理解的一小部分。我不确定什么会回到哪里以及什么。
因此我的问题是,我是否可以只创建一个新线程以在调用 Intent 时启动并让 Activity 在其上运行?听起来这比我完成我的 Activity 并尝试使 AsyncTask
正常工作更容易。
我想它可能看起来像这样
Thread t = new Thread(){
public void run(){
//start mark creation dialog view
Intent intentMarkCreation = new Intent(MixView.this, MarkCreation.class);
startActivityForResult(intentMarkCreation, 10);
}
};
t.start();
我知道 android 应该在常规线程中表现得很奇怪,但我不知道如何使用 AsyncTask
,而且我找不到很多很好的深入示例。如果有人可以通过一些示例或高级教程为我阐明这一点,我将非常感激。 :)
哦,这是我试图放入 asyncTask 中的一堆破烂代码
public class GraffMarkCreation extends AsyncTask {
/* ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.planets_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
fileChooser.setAdapter(adapter); */
private EditText nameMark;
private EditText describeMark;
private Spinner fileChooser;
private Button SaveMarkForLaterUpload;
private Button uploadMark;
private RadioGroup radioButtonLayout;
private ProgressBar uploadProgress;
private Gallery fileGalleryChooser;
private ImageButton goBackButton;
@Override
public void onCreate(Bundle savedInstancedState)
{
super.onCreate(savedInstancedState);
this.setContentView(R.layout.markcreationform);
this.describeMark = (describeMark);
findViewById(R.id.describeMark);
this.nameMark = (nameMark);
findViewById(R.id.nameMark);
this.fileChooser = (fileChooser);
findViewById(R.id.fileChooser);
this.SaveMarkForLaterUpload = (SaveMarkForLaterUpload);
findViewById(R.id.SaveMarkForLaterUpload);
this.uploadMark = (uploadMark);
findViewById(R.id.uploadMark);
this.radioButtonLayout = (radioButtonLayout);
findViewById(R.id.radioButtonLayout);
this.uploadProgress = (uploadProgress);
findViewById(R.id.uploadProgress);
this.fileGalleryChooser = (fileGalleryChooser);
findViewById(R.id.fileGalleryChooser);
this.goBackButton = (goBackButton);
findViewById(R.id.goBackButton);
}}
////////////create list of images to populate the spinner view with///////////////////////
/* class findImages extends AsyncTask<String[],String,Cursor>{
@Override
protected Cursor doInBackground(String[]... arg0) {
// TODO Auto-generated method stub
String[] projection = { MediaStore.Images.ImageColumns._ID,
MediaStore.Images.ImageColumns.DATA };
String selection = "";
String[] selectionArgs = null;
Cursor mImageExternalCursor = managedQuery
(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs,null);
Cursor mImageInternalCursor = managedQuery(MediaStore.Images.Media.INTERNAL_CONTENT_URI,
projection, selection, selectionArgs, null);
mImageExternalCursor.getString(mImageExternalCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA));
mImageInternalCursor.getString(mImageExternalCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA));
return mImageInternalCursor;
}
}
findImages findThemImages = new findImages();
String[] params = null;
findThemImages.execute(params);
////////////////////////////////////////////////////////////////////////////////////////////
radioButtonLayout.setOnCheckedChangeListener(this); */
/////Hook up radio buttons///////////////////////////////////////////////
/*
@Override
public void onCheckedChanged(RadioGroup radioButtonLayout, int buttonId) {
// TODO Auto-generated method stub
switch (buttonId){
case 1:
///if image button selected spinner is populated with
///list of images to chose from
/* String[] projection = { MediaStore.Images.ImageColumns._ID,
MediaStore.Images.ImageColumns.DATA };
String selection = "";
String[] selectionArgs = null;
Cursor mImageExternalCursor = managedQuery
(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs, null);
Cursor mImageInternalCursor = managedQuery(MediaStore.Images.Media.INTERNAL_CONTENT_URI,
projection, selection, selectionArgs, null);
mImageExternalCursor.getString(mImageExternalCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA));
mImageInternalCursor.getString(mImageExternalCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA));
*/
/*
break;
case 2:
///if audio button selected spinner is populated with
///list of audio files to chose from
break;
case 3:
///if video button selected spinner is populated with
///list of videos to chose from
break;
case 4:
///if text button selected spinner is not populated and
///user will be uploading only a basic mark with text only
break;
}
}
最佳答案
据我了解,Activity
必须在 UI 线程上运行。您最好的选择是使用 AsyncTask
或 IntentService
.由于您正在收集要在 UI 中使用的资源,因此我建议使用 AsyncTask
(阅读 this)。
您是否在 Activity
中创建了一个扩展 AsyncTask
的内部类?如果是这样,我会说你快到了。这允许您的 AsyncTask
轻松访问 Activity
中的 View
。也许如果您发布代码,我可以让您知道它需要如何重构/修复。
关于android - 是否可以启动一个新的 Intent 并让它在单独的线程中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378621/
我遇到了一个奇怪的问题。我的应用程序的 Release 版本似乎运行良好,但最近当我切换到 Debug 版本时,我在启动时立即遇到访问冲突。当释放分配的内存块时,就会发生访问冲突。所有这些都发生在静态
我在 C# 中偶然发现了这种奇怪的语法形式,并试图弄清楚它的含义以及如何使用它。网络上似乎没有关于此的任何文档。 object data = new { var1 = someValue, var2
我正在尝试使用浏览器的内置类型 CSSStyleDeclaration 以编程方式传递和修改样式(由于 .cssText 属性,这很方便)。 但是,new CSSStyleDeclaration()
我有现成的代码: internal bool firstAsSymbol(out Symbol s) { return (s = first as Symbol) !=
在新的 Eclipse 版本 2022-03 中,一些(但不是全部)java 项目在 Project Explorer View 中的外观发生了变化。尽管 Package Presentation 设
我正在尝试使用 FormData 通过获取 API 在 POST 请求中发送用户输入的数据。问题是,当我用我创建的表单创建一个新的 FormData 对象时,它一直在创建一个空对象——没有条目/键/值
我有一个用一些 intel-intrinsincs 编写的 C 代码。在我先用 avx 然后用 ssse3 标志编译后,我得到了两个完全不同的汇编代码。例如: AVX: vpunpckhbw %xm
最近,discord 为您自己的应用程序添加了对斜杠命令的支持。我通读了它的文档,并尝试搜索一些视频(但是该功能刚刚出现),但我不明白我实际上需要做什么才能使其正常工作。我正在使用 WebStorm(
我想使用 JRI 从 Java 调用 R。 我在 eclipse 下在主类中运行它: Rengine c = new Rengine(new String[] { "--vanilla" },
我正在使用新的 Place Autocomplete那是来自新的静态Google Places SDK 客户端库 (here)。所以它真的很容易使用,我刚得到this tutorial它按预期工作。
我刚刚更新到 flutter 版本 1.25.0-5.0.pre.92,我的代码中出现了很多与空安全相关的错误,这些错误以前运行良好。我没有以任何方式选择空安全,我所做的只是运行 flutter 升级
我已经使用 React Native 有一段时间了,但我想我会在网络上试用 React。所以我遵循了这个指南:https://reactjs.org/docs/create-a-new-react-a
周六早上在这里。尝试学习新的 Scala 编译器 dotty。 安装在我的 Mac 上使用 brew install lampepfl/brew/dotty 安装成功。我有版本 dotr -versi
我使用了谷歌地方的新依赖。单击自动完成 View 时应用程序崩溃。错误如下。, java.lang.NullPointerException: Place Fields must be set.
我关注了这个博客-> https://medium.com/@teyou21/training-your-object-detection-model-on-tensorflow-part-2-e9e
在哪里可以找到用于在此架构上进行组装的新寄存器的名称? 我指的是 X86 中的寄存器,如 EAX、ESP、EBX 等。但我希望它们是 64 位的。 我认为它们与我反汇编 C 代码时不同,我得到的是 r
新的服务总线库 Azure.Messaging.ServiceBus 使用 ServiceBusReceivedMessage 来接收消息 https://learn.microsoft.com/en
需要使用实时流媒体 channel 的实时编码类型在新的 Azure 门户中配置广告插入和石板图像。请帮忙解决这个问题,因为我找不到该功能。 最佳答案 此处描述了 Azure 媒体服务的广告插入选项
我正在使用新的 GitHub 操作,下面的工作流程的想法是在打开或同步 pr 时运行,它应该首先检查并安装依赖项,然后运行一些 yarn 脚本 name: PR to Master on: pul
我听说 DMD 2.058 中将有一个用于匿名函数的新语法,但我找不到任何相关信息。新语法是什么?旧语法是否会被弃用? 最佳答案 我相信它就像 C#'s . 以下内容是等效的: delegate(i,
我是一名优秀的程序员,十分优秀!