Articles of multithreading

Android – 从计时器线程更新位图

我有一个由一个带有ImageView的布局组成的Android项目。 public class MainActivity extends AppCompatActivity { /* original and stretched sized bitmaps */ private Bitmap bitmapOriginal; private Bitmap bitmapStretched; /* the only view */ private ImageView iv; …. } 此ImageView由此runnable函数更新 runnable = new Runnable() { @Override public void run() { iv.setImageBitmap(bitmapStretched); } }; runnable由一个在后台线程上运行的临时JNI函数运行,每秒调用60次。 public void jniTemporizedCallback(int buf[]) { /* set data to original […]

Android中的新线程(任务).start()VS ThreadPoolExecutor.submit(任务)

在我的Android项目中,我有很多地方需要异步运行一些代码(Web请求,调用db等)。 这不是长时间运行的任务(最多几秒钟)。 到目前为止,我正在创建一个新线程,通过该任务传递一个新的runnable。 但是最近我读了一篇关于Java中的线程和并发的文章,并且理解为每个任务创建一个新的Thread并不是一个好的决定。 所以现在我在我的Application类中创建了一个ThreadPoolExecutor ,它包含5个线程。 这是代码: public class App extends Application { private ThreadPoolExecutor mPool; @Override public void onCreate() { super.onCreate(); mPool = (ThreadPoolExecutor)Executors.newFixedThreadPool(5); } } 我还有一种方法可以将Runnable任务提交给执行者: public void submitRunnableTask(Runnable task){ if(!mPool.isShutdown() && mPool.getActiveCount() != mPool.getMaximumPoolSize()){ mPool.submit(task); } else { new Thread(task).start(); } } 因此,当我想在我的代码中运行异步任务时,我得到App的实例并调用submitRunnableTask方法将runnable传递给它。 正如你所看到的,我也检查一下,如果线程池有自由线程来执行我的任务,如果没有,我创建一个新线程(我不认为这会发生,但无论如何……我不知道我希望我的任务在队列中等待并减慢应用程序)。 在应用程序的onTerminate回调方法中,我关闭了池。 所以我的问题如下:这种模式是否比在代码中创建新的线程更好? 我的新方法有哪些优点和缺点? 它会引起我不知道的问题吗? 你能告诉我一些比这更好的东西来管理我的异步任务吗? PS我在Android和Java方面有一些经验,但我远不是一个并发大师。所以可能有些方面我在这类问题中不太了解。 任何建议将被认真考虑。

animation师只能在Sherlock Action Bar上的Looper线程上运行

我想在1秒延迟后隐藏动作栏, Timer().schedule(new TimerTask() { @Override public void run() { getSupportActionBar().hide(); } }, 1000); 运行代码后崩溃.. android.util.AndroidRuntimeException:animation师只能在Looper线程上运行 这个问题有什么解决方案吗? 谢谢。

我们什么时候需要在android应用程序中使用runOnUiThread?

我有一个代码示例,它使用此函数来运行线程runOnUiThread 。 我们为什么以及何时需要使用它? 编辑 如何使用AsyncTask类,有什么pros和cons ?

IntentService类没有在主ui线程上运行AsyncTask。 必须从主线程调用方法execute,当前推断的线程是worker

我最近发生了一个奇怪的问题。 我正在调用一个名为NotificationService的服务,它扩展了IntentService类。 现在在onHandleIntent(Intent intent)方法中,我调用异步任务。 代码如下: @Override protected void onHandleIntent(Intent intent) { defPrefs = PreferenceManager.getDefaultSharedPreferences(this); //int fiveMinutes = 1000 * 60 * 5; //Setting an alarm to call AlarmScheduler service now. This alarm scheduler service will set next days alarm to show notifications //based on the weekly schedule as obtained from server. Intent i = new […]

如何暂停和恢复surfaceView线程

我有一个surfaceView设置并运行,但当我恢复它时,我得到一个错误,该线程已经启动。 当应用程序进入后台然后返回前台时,处理的正确方法是什么? 我已经修好并设法使应用程序无法崩溃而返回……但是SurfaceView不再绘制任何内容了。 我的代码: @Override public void surfaceCreated(SurfaceHolder holder) { Log.e(“sys”,”surfaceCreated was called.”); if(systemState==BACKGROUND){ thread.setRunning(true); } else { thread.setRunning(true); thread.start(); Log.e(“sys”,”started thread”); systemState=READY; } } @Override public void surfaceDestroyed(SurfaceHolder holder) { Log.e(“sys”,”surfaceDestroyed was called.”); thread.setRunning(false); systemState=BACKGROUND; }

Thread和Handler之间的区别

有人能告诉我Thread和Handler之间的差异吗? 当我们使用Thread并使用Handler时? 我的项目中有两个代码,但我无法理解它们。 final Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // Do SomeThings } }; 和 private class readThread extends Thread { Handler mHandler; readThread(Handler h){ mHandler = h; this.setPriority(Thread.MIN_PRIORITY); } @Override public void run() { // Do SomeThings } } 在另一个方法中调用这样的处理程序 read_thread = new readThread(handler); read_thread.start(); 哪一个先跑? 有人可以解释一下吗?

如何阻止线程?

线程处于活动状态时,如何停止线程? 我已经给了 if(thread.isAlive()){ thread.stop(); } 但方法stop已弃用并且抛出exception 01-21 14:12:40.188: ERROR/global(535): Deprecated Thread methods are not supported. 01-21 14:12:40.188: ERROR/global(535): java.lang.UnsupportedOperationException 01-21 14:12:40.188: ERROR/global(535): at java.lang.VMThread.stop(VMThread.java:85) 01-21 14:12:40.188: ERROR/global(535): at java.lang.Thread.stop(Thread.java:1379) 01-21 14:12:40.188: ERROR/global(535): at java.lang.Thread.stop(Thread.java:1344) 我们怎么解决这个问题?

您会为Android推荐哪个Android优先级作业队列(Asynk Task,Multithreading)库?

您会为Android推荐哪个Android优先作业队列(作业管理器)库? 现在我使用greenrobot / EventBus但EventBusfunction太窄(EventBus是发布/订阅事件总线) 备择方案: https://github.com/Arasthel/AsyncJobLibrary https://github.com/stephanenicolas/robospice https://github.com/yigit/android-priority-jobqueue https://github.com/BoltsFramework/Bolts-Android 你有什么建议? 作业管理器将负责优先级划分,持久性,负载平衡,延迟,网络控制,分组等。它还为您的作业提供了良好的生命周期,以提供更好,一致的用户体验。

使用SurfaceView编程和用于游戏开发的线程策略

我正在使用SurfaceView和渲染线程来开发基于LunarLander之类结构的游戏。 但是,我遇到了很多问题,在这里我想指出一切。 我希望任何想要开发游戏的人都不需要再与他们斗争了。 任何对结构有更好了解的人都可以分享他们的经验,因为我还是Android的新手并渴望学习:) [1]不应多次调用函数thread.start() 。 在创建表面时创建线程时提到的许多文章,以便在使用该方法暂停活动后再次渲染: public void surfaceCreated(SurfaceHolder holder) { // start the thread here so that we don’t busy-wait in run() // waiting for the surface to be created if (thread.getState() == Thread.State.TERMINATED) { thread = new LunarThread(getHolder(), getContext(), getHandler()); } thread.setRunning(true); thread.start(); } 您可以看到,如果线程未终止并且调用了该函数,则活动将崩溃。 [2]如果您按下“电源”或“红色电话”按钮,或者电话闲置几分钟,则活动将处于onPause()状态,但线程仍在运行。 这是一个非常糟糕的做法,所以我需要find让线程停止的方法,并在onResume()时再次启动。 [3]如果屏幕锁定是纵向/横向,并且您的游戏坚持另一个方向,则屏幕锁定会强制您“定向”一次。 这意味着再次开始活动。 我仍然无法find解决方案。 (正如我在Android屏幕方向错误中提到的那样) 以下是解决这些问题的代码: […]