标签: handler

有必要退出HandlerThread吗?

我的应用程序使用a HandlerThread为需要在后台线程上运行的组件共享的一些操作.大多数情况下,此线程将处于等待状态.

我可以HandlerThread在我的应用程序中保持运行(等待),在必要时向其发送消息,但从不通过它退出HandlerThread.getLooper().quit()吗?这可能意味着HandlerThread即使在我的所有应用程序组件都被销毁之后,它仍将继续存在于等待状态.

最初这对我来说似乎是一个很大的问题 - 我绝对不想做的事 - 但我现在不确定.当Android杀死我的进程时,就像它需要释放CPU时间或内存一样,它将结束这个线程和我的UI线程.此外,线程将等待,因此它不会占用任何CPU时间.除此之外,我的应用程序使用了很多AsyncTasks,我知道利用线程池.根据我的理解,AsyncTask利用ThreadPoolExecutor,它不遵循任何应用程序生命周期回调(池中的线程在不使用时,只是坐等).

所以我的问题是,我可以使用HandlerThread跨多个应用程序组件,从不(或很少)退出它,并在不使用时让它等待,而不会遭受可怕的不良影响吗?

multithreading android handler

10
推荐指数
1
解决办法
2046
查看次数

Android微调器关闭

我有一个带有微调器的活动,我想知道是否有可能以编程方式关闭微调器,如果用户已打开它.

整个故事是在后台我在一个单独的线程上运行一个进程.当进程完成时,我在主要活动上调用一个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)

干杯!

android view handler spinner

10
推荐指数
4
解决办法
1万
查看次数

处理程序或计时器android

我试着每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)

谢谢!

java android timer handler

10
推荐指数
1
解决办法
3万
查看次数

在android中暂停处理程序和postDelayed

我对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"相同,因此它可以与数组中的某个字符串相同,但这会给我一个错误.我已经被困在这几个小时了,我在网上发现的其他例子似乎对像我这样的人来说太复杂了,他们主要想要在我能解决其他问题之前先掌握基础知识.任何这方面的任何帮助都将非常感激.谢谢.

multithreading android handler postdelayed

10
推荐指数
1
解决办法
3万
查看次数

spring-oauth2登录成功处理程序

有没有办法使用spring-oauth2添加登录成功处理程序?

我尝试使用基本身份验证筛选器,但它只筛选客户端凭据而不是用户凭据.

或者我是否需要创建自定义用户身份验证管理器?

TIA

java spring handler

10
推荐指数
2
解决办法
3209
查看次数

Kotlin - 如何在 Handler 中传递 Runnable

我是科特林初学者。我尝试创建一个每 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关键字在第一个函数中不起作用,但在第二个函数中却很好呢?

android handler runnable kotlin

10
推荐指数
1
解决办法
2万
查看次数

找不到请求类型"POST"的http处理程序

当我提交页面以加载.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)

任何想法为什么会出现这个错误?我很难过这个.

.net post http handler

9
推荐指数
2
解决办法
2万
查看次数

Android处理程序消息和ListView

这是我的错误:

*** 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)

android listview message message-queue handler

9
推荐指数
1
解决办法
2万
查看次数

如何管理Loopers和Threads(线程不再死了!)

我创建了一个扩展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创建一个线程会是一个好方法吗?

提前致谢 ;)

multithreading android handler looper

9
推荐指数
1
解决办法
2万
查看次数

TinyMCE:初始化后如何绑定事件

我已经搜索了很多但是通过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事件?

javascript events tinymce callback handler

9
推荐指数
2
解决办法
2万
查看次数