我的应用程序使用a HandlerThread为需要在后台线程上运行的组件共享的一些操作.大多数情况下,此线程将处于等待状态.
我可以HandlerThread在我的应用程序中保持运行(等待),在必要时向其发送消息,但从不通过它退出HandlerThread.getLooper().quit()吗?这可能意味着HandlerThread即使在我的所有应用程序组件都被销毁之后,它仍将继续存在于等待状态.
最初这对我来说似乎是一个很大的问题 - 我绝对不想做的事 - 但我现在不确定.当Android杀死我的进程时,就像它需要释放CPU时间或内存一样,它将结束这个线程和我的UI线程.此外,线程将等待,因此它不会占用任何CPU时间.除此之外,我的应用程序使用了很多AsyncTasks,我知道利用线程池.根据我的理解,AsyncTask利用ThreadPoolExecutor,它不遵循任何应用程序生命周期回调(池中的线程在不使用时,只是坐等).
所以我的问题是,我可以使用HandlerThread跨多个应用程序组件,从不(或很少)退出它,并在不使用时让它等待,而不会遭受可怕的不良影响吗?
我有一个带有微调器的活动,我想知道是否有可能以编程方式关闭微调器,如果用户已打开它.
整个故事是在后台我在一个单独的线程上运行一个进程.当进程完成时,我在主要活动上调用一个Handler,并根据结果执行一些任务.然后,我想关闭微调器,用户打开它.
微调器位于main.xml布局中:
<Spinner android:id="@+id/birthPlaceSpinner" android:layout_weight="1"
android:layout_height="wrap_content" android:prompt="@string/select"
android:layout_width="fill_parent" />
Run Code Online (Sandbox Code Playgroud)
这是处理程序:
private class BirthplaceChangedHandler extends Handler {
@Override
public void handleMessage(Message msg) {
String placeFilterStr = birthPlaceFilterText.getText().toString();
if ("".equals(placeFilterStr) || placeFilterStr == null || validNewAddresses.isEmpty()) {
birthPlaceSpinner.setEnabled(false);
hideGeoLocationInformation();
} else {
birthPlaceSpinner.setEnabled(true);
}
adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.multiline_spinner_dropdown_item, validNewAddressesStr)
birthPlaceSpinner.setAdapter(adapter);
}
}
Run Code Online (Sandbox Code Playgroud)
干杯!
我试着每1分钟显示一次消息!不停!我发现在固定延迟后只显示一次msg的例子!你能帮忙怎么设置它?或者如果使用计时器是更好的工作方式,我需要一个例子!
public class TimertestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
Handler handler = new Handler();
handler.postDelayed(
new Runnable() {
public void run() {
afficher();
}
}, 1000L);
}
public void afficher()
{
Toast.makeText(getBaseContext(),
"test",
Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我对android编程很新,所以请原谅我的noobie-ness.我正在尝试创建一个非常简单的活动,它将在布局中间放置一个TextView,并让它每隔几秒切换到一个不同的文本.例如,TextView将显示"text1",暂停几秒钟,然后说"text2,然后再次暂停.最后,我想添加更多文本并让它们一个接一个地循环.我知道这似乎是一个超级简单的事情,但我现在主要是试图了解线程和处理程序.无论如何,我已经读过我们应该如何保持UI线程中冗长的东西来防止错误,所以我想我会使用一个处理程序简单地在屏幕上切换2个文本.不幸的是,我无法让它工作.这里是一些代码:
public class MainActivity extends Activity {
String[] myarray = {"text1" , "text2"};
int arraylength = myarray.length;
int count;
Handler handler = new Handler();
TextView mytexts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mytexts = (TextView)findViewById(R.id.my_texts);
mytexts.setText(myarray[0]);
Thread t = new Thread( new Runnable(){
public void run() {
for (int count = 0; count < arraylength; count++){
handler.postDelayed(new Runnable(){
public void run() {
mytexts.setText(myarray[1]);
}
}, 7000);
}
}
});
t.start();
}
}
Run Code Online (Sandbox Code Playgroud)
从我在logcat中看到的,处理程序似乎一个接一个地运行postDelayed(在我的代码的情况下,它不等待7秒,postDelay做另一个postDelayed).另外,我想在"mytexts.setText(myarray [1])中创建1;" 与for循环中的"count"相同,因此它可以与数组中的某个字符串相同,但这会给我一个错误.我已经被困在这几个小时了,我在网上发现的其他例子似乎对像我这样的人来说太复杂了,他们主要想要在我能解决其他问题之前先掌握基础知识.任何这方面的任何帮助都将非常感激.谢谢.
有没有办法使用spring-oauth2添加登录成功处理程序?
我尝试使用基本身份验证筛选器,但它只筛选客户端凭据而不是用户凭据.
或者我是否需要创建自定义用户身份验证管理器?
TIA
我是科特林初学者。我尝试创建一个每 2 秒重复一次的任务。所以我创造了这样的东西。
val handler = Handler()
handler.postDelayed(Runnable {
// TODO - Here is my logic
// Repeat again after 2 seconds
handler.postDelayed(this, 2000)
}, 2000)
Run Code Online (Sandbox Code Playgroud)
但在 postDelayed(this) 中它给出了错误 - required Runnable!, found MainActivity。我什至尝试过,this@Runnable但没有成功。
但是当我像这样编写相同的函数时,它就可以工作了
val handler = Handler()
handler.postDelayed(object : Runnable {
override fun run() {
// TODO - Here is my logic
// Repeat again after 2 seconds
handler.postDelayed(this, 2000)
}
}, 2000)
Run Code Online (Sandbox Code Playgroud)
那么为什么this关键字在第一个函数中不起作用,但在第二个函数中却很好呢?
当我提交页面以加载.net图表控件时,会出现此错误.我在下面的web.config中有http处理程序.因为它似乎不起作用的原因.
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
<add verb="GET" path="FtbWebResource.axd" type="FreeTextBoxControls.AssemblyResourceHandler, FreeTextBox" />
<add path="ChartImg.axd" verb="GET,HEAD,POST" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false" />
</httpHandlers>
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会出现这个错误?我很难过这个.
这是我的错误:
*** Uncaught remote exception! (Exceptions are not yet supported across processes.)
android.util.AndroidRuntimeException: { what=1008 when=368280372 } This message is already in use.
at android.os.MessageQueue.enqueueMessage(MessageQueue.java:171)
at android.os.Handler.sendMessageAtTime(Handler.java:457)
at android.os.Handler.sendMessageDelayed(Handler.java:430)
at android.os.Handler.sendMessage(Handler.java:367)
at android.view.ViewRoot.dispatchAppVisibility(ViewRoot.java:2748)
Run Code Online (Sandbox Code Playgroud)
我正在尝试的是有一个listview,由自定义列表项填充,每个列表项有多个视图,每个视图都附加一个onclick监听器.当按下这个onClickListener时,它会向一个带有what和arg1参数的Handler发送一条消息.单击我的一个元素会触发启动新活动的意图.单击另一个显示祝酒词.当组合按下这些时,我得到上面的错误.即单击文本以触发意图,(然后按回)然后单击图像以显示吐司,然后当您单击文本再次触发意图时,我获得FC.
这是下面的代码,我试图尽可能多地删除错误的骨头:
如果你想跳到什么重要的,请看ConversationAdapter.class中的onClickListener以及它们如何与StartPage.class交互
Android清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.handler.test"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".StartPage"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".DetailsPage"
android:label="DetailsPage"
>
</activity>
</application>
<uses-sdk android:minSdkVersion="3" />
</manifest>
Run Code Online (Sandbox Code Playgroud)
StartPage.class:
package com.handler.test;
import java.util.ArrayList;
import android.app.ListActivity;
import android.app.ProgressDialog;
import …Run Code Online (Sandbox Code Playgroud) 我创建了一个扩展Thread的类,通过LocationManager在非ui线程中检索用户位置.我将它作为一个线程实现,因为它必须在请求时启动并在有限的时间内完成它的工作.顺便说一句,我必须在线程中添加一个Looper对象,以便能够为LocationManager(onLocationChanged)创建处理程序.
这是代码:
public class UserLocationThread extends Thread implements LocationListener {
//...
public void run() {
try {
Looper.prepare();
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
Looper.loop();
Looper.myLooper().quit();
} catch (Exception e) {
//...
}
}
@Override
public void onLocationChanged(Location location) {
locationManager.removeUpdates(this);
//...
handler.sendMessage(msg); //this is the handler for communication with father thread
}
//...}
Run Code Online (Sandbox Code Playgroud)
我希望线程启动,接收用户位置数据(在这种情况下只是一次),通过消息将数据发送到主线程给处理程序,然后死掉.问题是,在我的情况下,一旦run方法结束,线程就不会再死了(应该没问题,因为否则onLocationChanged将不会收到新的位置).
但是通过这种方式,假设线程的停止和挂起方法已被弃用,那么至少在这种情况下,使用looper die创建一个线程会是一个好方法吗?
提前致谢 ;)
我已经搜索了很多但是通过google-fu'ing不会得到任何结果:(
我有一个已初始化的tinyMCE编辑器,我无法控制初始化过程,因此以下代码根本不起作用:
tinyMCE.init({
...
setup : function(ed) {
ed.onChange.add(function(ed, l) {
console.debug('Editor contents was modified. Contents: ' + l.content);
});
}
});
Run Code Online (Sandbox Code Playgroud)
由于未定义jQuery tinymce插件,因此以下代码不起作用:
$('textarea').tinymce({
setup: function(ed) {
ed.onClick.add(function(ed, e) {
alert('Editor was clicked: ' + e.target.nodeName);
});
}
});
Run Code Online (Sandbox Code Playgroud)
我的意思是,它必须使用tinymce.something语法.
在tinyMCE初始化之后,如何将回调函数绑定到任何tinyMCE事件?