Android NDK'de çoğunlukla yerel kod çalıştıran bir sosyal oyun üzerinde çalışıyorum. Oyun 3 ana ndk pthreads vardır:Bir iş parçacığı havuzuna görev gönderme, RejectedExecutionException verir
- bir oyun iplik
- bir sunucu iletişim iplik
- java, bundan daha
Diğer (Renderer.onRender aracılığıyla denir) ana render iplik , "yazı" "Gönder", yan, biz ScheduledExecutorService
kendi ile kendi iş parçacığı olarak çoğaltılır AdWhirl'in kullanıyoruz, ancak biz her çağrıyı için "zamanlama" sardırırsın RejectedExecutionException
yakalamak için try-catch bloğu ile vs "start". Ancak, sunduğumuz her yeni sürümde korkunç RejectedExecutionException
hala var.
Android Market'ten yığın takibi benim için daha fazla ipucu bırakmıyor ve QA departmanımız da test sırasında zorlukla karşılaşılan problemi tespit etmeyi zor buluyor (sadece kullanıcılarımız kilitlenme bildirdi). Bizim kullanıcıların sadece küçük bir kısmını etkiler ama yine de
java.util.concurrent.RejectedExecutionException
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1876)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:774)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1295)
at android.os.AsyncTask.execute(AsyncTask.java:394)
at c.onProgressUpdate(Unknown Source)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:432)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4632)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
java.util.concurrent.RejectedExecutionException: pool=128/128, queue=10/10
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1961)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:794)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1315)
at android.os.AsyncTask.execute(AsyncTask.java:394)
at c.onProgressUpdate(Unknown Source)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:432)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3691)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
at dalvik.system.NativeStart.main(Native Method)
java.util.concurrent.RejectedExecutionException
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1876)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:774)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1295)
at android.os.AsyncTask.execute(AsyncTask.java:394)
at c.onProgressUpdate(Unknown Source)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:432)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
! İpucunuz için teşekkürler, boyutu artırmak veya herhangi bir sınır var mıdır? Kodumuzda, pek çok AsyncTask kullanmıyoruz, ancak ScheduledExecutorService ve diğer yürütücüler kullanıyoruz ve daha büyük threadpool belirtiyoruz. Bu icracıların büyük bir kısmı var, tüm icracıların toplam sayısı için herhangi bir sınırlama var mı? Kombine uygulama çapında iş parçacığı sayısı sınırı varsa, bunu bir seferde kontrol etmem gerekecek ... uygulamalarımız 20'den fazla iş parçacığıyla çalışıyor ... – Zennichimaro
Diane'e göre bir sınırlama yoktur Ancak, 10'larda kalmak için en iyi yöntemdir. [Azami havuz boyutu] 'nu ayarlayabilirsiniz (http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#setMaximumPoolSize (int)) – Reno
Daha az Runnable ve AsyncTask kullanmak için uygulamayı yeniden yazdığımdan ve şimdi çalışıyor ve artık herhangi bir RejectedExecutionException görmedim. Reno ve Diane'e teşekkürler! – Zennichimaro