Articles of 处理程序

Android,Handler是在主线程还是其他线程中运行?

我有以下代码。 public class SplashScreen extends Activity { private int _splashTime = 5000; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.splash); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); new Handler().postDelayed(new Thread(){ @Override public void run(){ Intent mainMenu = new Intent(SplashScreen.this, MainMenu.class); SplashScreen.this.startActivity(mainMenu); SplashScreen.this.finish(); overridePendingTransition(R.drawable.fadein, R.drawable.fadeout); } }, _splashTime); } } 我在分析这段代码时遇到了问题。 至于知道处理程序在主线程中运行。 […]

handler.post(runnable)是否启动了一个新线程?

如果处理程序是在主UI线程中实例化的,那么带有Runnable的post是否会创建一个添加到消息队列的子线程,或者它是否只是在UI线程中运行? handler.post(new Runnable(){ public void run() { // do stuff } });

从服务更新UI(使用处理程序?)

我在收到通知时尝试在FirstActivity更新我的UI,但是被runOnUiThread , Runnable和Handler runOnUiThread糊涂了。 这就是我所拥有的:我正在运行FirstActivity和NotificationService。 当NotificationService收到通知时,它将更新FirstActivity UI。 我还有另一个服务AlarmService运行。 第一项活动 @Override public void onResume() { super.onResume(); //some other code for alarm service } NotificationService //on receiving notification private void showNotification(String text) { //Get activity Class activityClass = null; try { activityClass = Class.forName(“com.pakage.FirstActivity”); contextActivity = (Activity) activityClass.newInstance(); //Update UI on FirstActivity not working contextActivity.runOnUiThread(new Runnable() { […]

使用Looper.getMainLooper()初始化的处理程序不响应消息回调

我正在尝试实现从不同线程监听同一个Looper的Handler。 下面我有两个处理程序,一个在主线程中创建,另一个在子线程中创建,但是两个都初始化为侦听Main Looper。 private Handler mMain; public static final ThreadPoolExecutor tpe = (ThreadPoolExecutor) Executors.newCachedThreadPool(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMain = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { Log.wtf(“”, “main:” + msg); } }; tpe.execute(new Runnable() { private Handler tChild = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { […]

处理程序,我想定期运行

使用handler想要定期运行count为0,如果countis为1,否则请修复此代码。 mRunnable = new Runnable(){ @Override public void run() { if(count == 0){ setImage(); count = 1; } else{ weather = mContentResolver.getType(mUri); setWeather(weather); count = 0; } } }; mHandler = new Handler(); mHandler.postDelayed(mRunnable, 3000);

Android自定义视图到活动通信

我有一个自定义控件/视图,可以在其范围内观察手势的方向。 我想根据手势的方向向托管视图的活动发回不同的消息。 我很难确定正确的做法是什么。 我认为我可以在控件中引发一个自定义事件,然后在活动中的控件上添加一个监听器,但我找不到Android中自定义事件的任何信息。 任何帮助,将不胜感激。 谢谢。

线程/处理程序错误 – 尚未发布指定的消息队列同步屏障标记

我收到此错误 – java.lang.IllegalStateException:指定的消息队列同步障碍标记尚未发布或已被删除。 作为Java / Android的相对新手,毫无疑问我错过了一些东西,但我正在做的是这个 – 我有一个项目使用Exif数据根据拍摄日期显示照片,目的是在每个舞台上使用类似的模型…… 工作线程 – > UI线程 – >自定义显示适配器。 然后在GridView中单击其中一个“单元格”将触发下一个“活动”。 第一个活动搜索所有照片文件,创建“年”列表,然后每个后续活动将其过滤到几个月,几天等。 但是,启动第二个活动会直接启动上述错误,并通过基本的线程/处理程序设置处理消息。 这是将消息传递给线程的类 – public class MonthSort { Handler handler; int imageWidth; List photoList; public MonthSort(Handler handler2, int width, List pList) { photoList = new ArrayList(); photoList = pList; imageWidth = width; handler = handler2; } public void sortFiles() { […]

在后台主题上加载广告(adMob)

我想在后台线程上加载我的add,因为它会在打开和关闭时使SlidingMenu 。 我应该使用Thread / Handler吗? 还是AsyncTask ? String MY_AD_UNIT_ID = “—-“; AdView adView = new AdView(getActivity(), AdSize.BANNER, MY_AD_UNIT_ID); final LinearLayout adLayout = (LinearLayout) getActivity() .findViewById(R.id.adLayout); adLayout.addView(adView); adView.loadAd(new AdRequest());

handler.post(runnable)并不总是在android中执行run方法

我在主ui线程(mUIHandler)和工作线程(其他线程)中创建了一个Handler实例,当我尝试执行runnable的run方法时,run方法几乎被执行了10次,但是有那个1次没有被执行。 mUIHandler.post(uiRunnable) – >是否总能保证执行runnable中的run方法? 我甚至添加了日志方法来检查并且可以看到日志直到post方法innvocation被执行但是run方法日志没有显示。 post(可运行)如何在内部工作? 是否保证ui线程(带有处理程序的线程)将在调用post后立即执行此操作? 任何帮助,将不胜感激。 谢谢!

Android wait()无效

这是我的第一个问题,如果我不遵守任何论坛规则,请原谅我。 我需要我的程序等待3秒然后更改内容视图 我的代码是: setContentView(R.layout.logout); new Thread(new Runnable() { @Override public void run(){ try { synchronized(this){ wait(3000); } } catch(InterruptedException ex){ } } }).start(); setContentView(R.layout.main); 该程序没有错误,但没有等待。 当它到达这个部分时,它只显示“主”布局而根本没有显示“注销”布局。 我的做法有什么问题?