[英]Android Studio Java runnable not running
我不知道为什么,但是我的跑步机无法正常工作。 我对编程非常陌生。 请帮我。
@Override
public void onCreate() {
Toast.makeText(ApplicationContextProvider.getContext(), "Service Template", Toast.LENGTH_SHORT).show();
handler = new Handler();
runnable = new Runnable() {
public void run() {
Toast.makeText(ApplicationContextProvider.getContext(), "Runnable", Toast.LENGTH_LONG).show();
Calendar calendar = Calendar.getInstance();
int day = calendar.get(Calendar.DAY_OF_WEEK);
if (day == Calendar.WEDNESDAY){
Toast.makeText(ApplicationContextProvider.getContext(), "Wednesday", Toast.LENGTH_LONG).show();
WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 0;
params.width = 0;
params.height = 0;
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
LinearLayout view = new LinearLayout(context);
view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
WebView wv = new WebView(context);
String newUA= "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0";
wv.getSettings().setJavaScriptEnabled(true);
wv.getSettings().setUserAgentString(newUA);
wv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
view.addView(wv);
wv.loadUrl(url1);
wv.setWebViewClient(new HelloWebViewClient());
windowManager.addView(view, params);
}
handler.postDelayed(runnable, 1000*5);
}
};
}
如您所见,我设置了一个Toast,让我知道可运行对象何时运行。 显示服务模板的Toast出现了,但是可运行的Toast却没有出现。
在该课程之前的主课程中,我使用了很多共享的首选项,但我不知道这是否可能是问题的原因。 当我按下按钮进入该课程时,我的logCat也不会更改。
当我关闭应用程序时,我的logcat会写: W/IInputConnectionWrapper: showStatusIcon on inactive InputConnection
我正在尝试制作一个网络机器人。
请帮我。
您的postDelay位置错误。 尝试将其移动到运行之外。 像这样
@Override public void onCreate() {
Toast.makeText(ApplicationContextProvider.getContext(), "Service Template", Toast.LENGTH_SHORT).show();
handler = new Handler();
runnable = new Runnable() {
public void run() {
Toast.makeText(ApplicationContextProvider.getContext(), "Runnable", Toast.LENGTH_LONG).show();
Calendar calendar = Calendar.getInstance();
int day = calendar.get(Calendar.DAY_OF_WEEK);
if (day == Calendar.WEDNESDAY){
Toast.makeText(ApplicationContextProvider.getContext(), "Wednesday", Toast.LENGTH_LONG).show();
WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 0;
params.width = 0;
params.height = 0;
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
LinearLayout view = new LinearLayout(context);
view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
WebView wv = new WebView(context);
String newUA= "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0";
wv.getSettings().setJavaScriptEnabled(true);
wv.getSettings().setUserAgentString(newUA);
wv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
view.addView(wv);
wv.loadUrl(url1);
wv.setWebViewClient(new HelloWebViewClient());
windowManager.addView(view, params);
}
}
};
handler.postDelayed(runnable, 1000*5);}
这将不会运行,因为您永远不会运行它
您正在调用handler.postDelayed(runnable, 1000*5);
在永远不会运行的运行方法中。
移动handler.postDelayed(runnable, 1000*5);
外部run()
方法
编辑:
使用handler.postDelayed(runnable, 1000*5);
可以使用run()
方法来递归运行runnable。但是需要首先启动它。
问题是您实际上从未将处理程序发布到消息队列中。 您的运行方法是正确的。 假设您处于活动状态,则将处理程序发布在onPostResume方法中。
@Override
protected void onPostResume() {
super.onPostResume();
...
handler.post(runnable);
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.