我们在Android中执行AsyncTask的正常方法是,从Android API: private class DoIntenseTask extends AsyncTask<Object, Object, Void> { protected Void doInBackground(Object… params) { for (Object param : params) { Object rtnObj = doIntenseJob(param); publishProgress(rtnObj); } return null; } protected void onProgressUpdate(Object… progress) { for (Object rtnObj : progress) { updateActivityUI(rtnObj); } } } 我的激烈任务是松散耦合的,执行顺序并不重要,通过这样做,一个单独的线程被分配来运行一系列激烈的任务。 我个人认为这是一种半途而废的解决scheme。 是的,紧张的工作不再是在UI线程中运行,而是仍然需要逐一执行(在许多情况下,我们正面临着一份紧张的工作列表,我认为这也是AsyncTask中的方法是多参数化的原因)。 Google应该使API更加可重用,以解决不同types的场景。 我真正想要的是在线程池(例如poolSize = 5)中并行运行一些doIntenseJob()。 看起来像谷歌提供一个由AsyncTask.executeOnExecutor()的解决scheme,但不幸的是只有API级别11后才可用。我正在开发移动应用程序,并想知道是否有一种解决方法,我可以在API级别11下实现相同的行为。 提前致谢 ÿ
我知道在Java代码中使用registerReceiver和unregisterReceiver来处理接收者,但是假设我在我的清单中有以下内容: <receiver android:name=".headsetHook"> <intent-filter android:priority="99999999999"> <action android:name="android.intent.action.ACTION_HEADSET_PLUG" /> </intent-filter> </receiver> 有没有办法我可以在Java代码注销这个地方? 我可以给它一个id属性或东西,然后得到它,并取消注册? 我问,因为我希望我的应用程序只在第一次执行此操作时执行某些操作,然后取消注册并稍后以Java重新注册。 希望我明确表示,谢谢你的帮助。
我有一个由多个Button组成的XML定义的Layout 。 目前我在OnCreate方法中这样做来定义针对button的事件处理程序: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button newPicButton = (Button)findViewById(R.id.new_button); newPicButton.setOnClickListener(btnListener); ….. similarly for other buttons too ….. } 在Button的onClick事件中,我启动了一个相机Intent来获取图片,并在onActivityResultcallbackonActivityResult我再一次设置事件处理器,并设置View如下: protected void onActivityResult(int requestCode, int resultCode, Intent data) { setContentView(R.layout.main); Button newPicButton = (Button)findViewById(R.id.new_button); newPicButton.setOnClickListener(btnListener); …similarly for other buttons too } 我是Android新手,每次重新定义一个事件的方法对我来说似乎都很肮脏。 我想知道在像这样的场景中定义button事件处理程序的最佳做法是什么。 编辑:粘贴我的完整课程 public class CameraAppActivity extends Activity { /** […]
我有一个TextView呈现基本的HTML,包含2+链接。 我需要捕获点击链接并打开链接 – 在我自己的内部WebView(不在默认浏览器中)。 处理链接呈现最常见的方法似乎是这样的: String str_links = "<a href='http://google.com'>Google</a><br /><a href='http://facebook.com'>Facebook</a>"; text_view.setLinksClickable(true); text_view.setMovementMethod(LinkMovementMethod.getInstance()); text_view.setText( Html.fromHtml( str_links ) ); 但是,这会导致链接在默认的内部Web浏览器中打开(显示“完成操作使用…”对话框)。 我试图实现一个onClickListener,正确地获得点击链接时触发,但我不知道如何确定哪个链接被点击… text_view.setOnClickListener(new OnClickListener(){ public void onClick(View v) { // what now…? } }); 或者,我试着创build一个自定义的LinkMovementMethod类并实现onTouchEvent … public boolean onTouchEvent(TextView widget, Spannable text, MotionEvent event) { String url = text.toString(); // this doesn't work because the text […]
我需要知道shouldinterceptrequest是如何工作的。 我不知道如何创build和处理这个方法来读取和replaceCSS链接。 谢谢!
在Android中可能有重叠视图吗? 我想要在前面有一个透明PNG的ImageView和在后台的另一个视图。 编辑: 这是我现在所拥有的,问题是imageView中的图像不透明,应该透明的部分只是黑色。 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/gallerylayout" > <Gallery android:id="@+id/overview" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <ImageView android:id="@+id/navigmaske" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/navigmask" /> </RelativeLayout> 编辑: 我得到它的工作,这是从另一个程序员在团队的主题文件。 只是改变了这个 <item name="android:background">#FF000000</item> 对此 <item name="android:background">#00000000</item>
我有一个应用程序,在这个应用程序中,我想实现一个双抽屉 – 左边一个,右边一个。 左侧抽屉用于应用程序导航,右侧抽屉用于结果过滤。 所以,布局是这样的: <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/light_grey" android:orientation="vertical"> <GridView android:id="@+id/gridview" style="@style/GridViewStyle" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:horizontalSpacing="7dp" android:stretchMode="columnWidth" android:verticalSpacing="7dp" /> </LinearLayout> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="#111" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" /> <ListView android:id="@+id/right_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="end" android:background="#111" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" /> </android.support.v4.widget.DrawerLayout> 你可以清楚的看到这里的“left_drawer”和“right_drawer”,以及它们各自的引力 – “开始”和“结束”而这个实际上是有效的! 你可以把它们拉出来。 […]
我已经实现了由AlarmManager触发的BroadcastReceiver。 AlarmManager在BOOT_COMPLETED上初始化。 所以我必须在清单中声明接收者。 我的问题是,我希望BroadcastReceiver只有当我自己的活动没有在前台(也就是用户不与我的应用程序交互)做某事。 我从远程服务器获取信息,不想通知用户他是否正在我的应用程序中。 到目前为止,我还没有设法find一种方法来确定我的应用程序是否在前台。 有没有办法做这样的事情? ActivityManager告诉我,如果我的应用程序正在运行,而不是它是否在前台。 问题与这里描述的几乎相同: 从BroadcastReceiver通知活动只有在前台 解: 在评估了几个解决scheme后,我想快速勾画出我认为是处理背景/前景中活动的最佳方法。 首选方法是在您的活动的onResume方法中注册一个广播接收器,并注销onPause上的活动。 任何服务或其他背景元素将需要发送广播意图与您的活动将拦截的具体行动。 如果您的活动处于前台,它将有意向接收方注册,并能够直接处理从您的服务发送的意图。 如果它不在前台,它将不会收到意图,但是调用广播的服务将知道没有人拦截它的广播意图,并且能够自己处理这个意图。 例如,它可以发起所需的活动,显示通知等。
我的视图布局中有三个EditText小部件。 有没有办法为所有三个EditTexts使用一个TextWatcher ?
从根本上说,我想build立一个IntentService的Activity的callback。 我的问题和这里回答的非常相似: Restful API服务 但是,在答案代码中,活动代码被视为实施ResultReceiver。 除非我失去了一些东西,ResultReceiver实际上是一个类,所以它不能执行这个实现。 所以基本上,我问什么是将ResultReceiver连接到该服务的正确方法。 在这方面,我对Handler和ResultReceiver的概念感到困惑。 任何工作示例代码将不胜感激。