Articles of multithreading

Android每X秒运行一次服务线程

我想在Android服务中创建一个每X秒运行一次的线程 我目前正在使用,但postdelayed方法似乎真的滞后我的应用程序。 @Override public int onStartCommand(Intent intent, int flags, int startId){ super.onStartCommand(intent, flags, startId); startRepeatingTask(); return startId; } private final static int INTERVAL = 20000; //20 milliseconds Handler m_handler = new Handler(); Runnable m_handlerTask = new Runnable() { @Override public void run() { // this is bad m_handler.postDelayed(m_handlerTask, INTERVAL); } }; void startRepeatingTask() { m_handlerTask.run(); […]

在LogCat中显示Android线程ID

默认情况下,Eclipse上的LogCat显示5个信息列: Time Level pid tag message 是否可以添加第6列,显示线程ID ?

如何在Android AsyncTask中使用ExecutorService?

我需要执行一些AsyncTask然后收集所有结果,合并然后将最终结果返回给我的用户。 我正在寻找一种在Android中管理多个AsyncTask的方法。 我正在考虑使用Java Concurrency包中的ExecutorService ,但我坚持,因为ExecutorService接受Runnables或Callables。 为了确定我的要求,我可以使用 ExecutorService.invokeAll((Collection<? extends Callable> tasks) 只有当所有提交的任务都完成后, invokeAll()方法才会返回List>的列表,并且我可以从相应的Future获取每个任务的结果。 ExecutorService期望它不接受AsyncTask ,这一切都很好。 有没有其他方法可以使用AsyncTask和ExecutorService或者如果您可以请推荐一种不同的方法。

Android线程等到可见

我已经制作了一个自定义饼图视图,我希望在饼图可见时启动animation。 目前我所拥有的是饼图animation,但是当你在屏幕上实际看到它时,animation已经结束了一半。 这就是我所拥有的: public class SinglePieChart extends SurfaceView implements SurfaceHolder.Callback { // Chart setting variables private int emptyCircleCol, strokeColor, number, total; // Paint for drawing custom view private Paint circlePaint; private RectF rect; private Context context; private AnimThread animThread; private SurfaceHolder holder; // animation variables private float speed; private float current = 0.0f; private boolean […]

Android我可以使用多少个线程?

我有一个Android应用程序,它有单独的东西,但基本上都是线程(绝对是Android调试器的线程) 有多个animation侦听器可以相互循环和调用 倒计时器在启动后总是倒计时到零 现在我需要考虑添加更多的倒计时器。 我可以进行多少这种循环过程? 在这个特定的实现中,我不关心性能,效率等,直到它变得明显。 洞察力赞赏

活动泄露窗口com.android.internal.policy.impl.PhoneWindow$DecorView@46368a28最初添加在这里

这个问题让我抓狂。 我想念一些关于如何在一个活动中创建的新线程中处理长操作以及如何在长时间操作完成后修改视图组件(如文本等)的基本但非常重要的知识。 让我首先向您展示我的代码中发生此问题的部分: mProgressDialog = ProgressDialog.show(mContext, “Tripplanner”, “please wait…”, true, false); connectAndGetRoute(); private void connectAndGetRoute(){ new Thread(){ @Override public void run() { try { if(!connectTo9292ov()) return;// conncetto9292ov() connects to a website, parses the reasult into an arraylist. The arraylist contains route. } catch(UnknownHostException e){ Toast.makeText(mContext, “failed to connect to server”, Toast.LENGTH_LONG).show(); }catch (ClientProtocolException e) { […]

Android后台下载统计信息

在Android环境中,跟踪每个应用程序的数据使用情况,包括前台和后台。 以编程方式,什么代表前景和后台数据使用? Android是否根据您的应用程序的活动是否在屏幕上显示(IE:在onCreate / onResume和onPause方法之间)并且线程在该时间段内运行来跟踪此统计信息? 或者它是否跟踪数据是否从优先级为THREAD_PRORITY_BACKGROUND的线程下载? 或者它使用的是另一个州吗?

使用GreenRobot EventBus从线程到线程进行通信

刚开始使用GreenRobot的EventBus 。 只有一件事让我苦苦挣扎:你如何在不同的线程之间进行通信,以便onEventXY()方法实际上也在订阅的线程中执行。 看来,当您发布事件时,订阅者onEvent方法是从与发布事件的线程相同的线程中调用的。 那不是我想要的。 我希望能够使用EventBus进行线程间通信,使得实际接收的事件对象由接收事件对象的线程中的onEvent方法处理。 那可能吗? 例: mainThread backGroundThread1 backGroundThread2 MainThread在EventBus上发布一个事件,backGroundThread1在其onEventXY()方法中接收它并在其自己的线程中执行代码(设置一些variables),backGroundThread2在其onEventXY方法中接收它并在其自己的线程中执行代码(设置一些variables)。 如果这还不可能(我),我注定要使用线程队列,比如BlockingQueue,这很难实现。 有任何想法吗?

如果我们尝试将本机线程永久地附加到DVM(JVM)会有什么后果?

是否可以将本机线程永久地附加到JVM(AttachCurrentThread)(或)是否更好地在需要时进行附加(调用java函数)并在工作完成后立即分离 我用上述案例编写了一个示例本机应用程序,没有发现任何差异。 但通过谷歌搜索,模糊地我才知道,当连接到JVM时,JVM的线程调度负责调度,否则OS将调度本机线程(如果没有附加)。 这是真的? 分离先前已连接的任何线程非常重要; 否则,当您调用DestroyJavaVM时程序不会退出。 – http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jniref.html#attach 会有任何性能问题吗? 如果有人知道,请告诉我,这是我的重要设计方面。 感谢和问候。

使用queueEvent()在渲染器和另一个类之间传递variables

我想从我的渲染器传递另一个类的一些值。 在渲染器计算了值之后,我在辅助类中有一个互斥锁,它应该告诉我渲染器已经完成计算,所以我可以继续使用这些新值。 我可以毫无问题地传递渲染器的值,但我无法弄清楚如何让它们恢复。 我目前使用一些静态variables,但在渲染器更改后,它们似乎迷路了。 它们在我的其他课堂上不可见。 例: 一类 public class View extends SurfaceView{ private void doSomething(){ glSurfaceView.queueEvent(new Runnable() { @Override public void run() { //.. renderer.calculate(stack); } }); } private void doAnotherThing(){ //Never happens: if(Helper.hasCalculated){ /… } } } 在我的渲染器中 : public class MyRenderer implements GLSurfaceView.Renderer{ private void calculate(Stack stack){ Helper.hasCalculated = true } } 我的助手class: […]