是否有一种强大的方法来检测Thread.currentThread()应用程序中的Android系统UI线程是否存在?
我想在我的模型代码中放置一些断言,断言只有一个线程(例如 ui线程)访问我的状态,以确保不需要任何类型的同步.
我有一个android程序(webview中的Java + html).我可以从javascript调用Java代码.但另一种方式停止工作(在eclipse中更新后).
所以这就是我想要做的
我试图让它在MainActivity中使用WebView,但它没有用.
MainActivity.java
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final WebView webView = (WebView)findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
javascr = new Javascript(this, webView);
webView.addJavascriptInterface(javascr, "AndroidFunction");
webView.loadUrl("file:///android_asset/www/index.html");
....
}
Run Code Online (Sandbox Code Playgroud)
Javascript.java
public class Javascript {
Context cont;
WebView webView;
Javascript(Context c, WebView w) {
cont = c;
webView = w;
}
// function called in the javascript by AndroidFunction.test();
public void test() {
// Breaking point!!!
webView.loadUrl("javascript:helloBack()");
} …Run Code Online (Sandbox Code Playgroud) 知道为什么会出现这种崩溃吗?跟踪只有本机代码,因此很难跟踪它.发生在三星Galaxy S3平台4.1.2当我运行里面的动画Fragment,当动画结束时我叫notifyDataSetChanged了FragmentStatePagerAdapter.该问题不是100%可重复的.
谢谢.
跟踪:
03-01 11:50:11.836: E/AndroidRuntime(21136): FATAL EXCEPTION: main
03-01 11:50:11.836: E/AndroidRuntime(21136): java.lang.NullPointerException
03-01 11:50:11.836: E/AndroidRuntime(21136): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3147)
03-01 11:50:11.836: E/AndroidRuntime(21136): at android.view.View.getDisplayList(View.java:12646)
03-01 11:50:11.836: E/AndroidRuntime(21136): at android.view.View.getDisplayList(View.java:12754)
03-01 11:50:11.836: E/AndroidRuntime(21136): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3151)
03-01 11:50:11.836: E/AndroidRuntime(21136): at android.view.View.getDisplayList(View.java:12646)
03-01 11:50:11.836: E/AndroidRuntime(21136): at android.view.View.getDisplayList(View.java:12754)
03-01 11:50:11.836: E/AndroidRuntime(21136): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3151)
03-01 11:50:11.836: E/AndroidRuntime(21136): at android.view.View.getDisplayList(View.java:12646)
03-01 11:50:11.836: E/AndroidRuntime(21136): at android.view.View.getDisplayList(View.java:12754)
03-01 11:50:11.836: E/AndroidRuntime(21136): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3151)
03-01 11:50:11.836: E/AndroidRuntime(21136): at android.view.View.getDisplayList(View.java:12646)
03-01 11:50:11.836: E/AndroidRuntime(21136): at android.view.View.getDisplayList(View.java:12754) …Run Code Online (Sandbox Code Playgroud) 当用户向上滚动RecyclerView并在用户向下滚动时隐藏系统栏时,我想显示系统栏.然而,使用我的方法它可以工作,但内容在显示/隐藏过程中扼杀地移动和闪烁.U为此行为上传了视频:https://drive.google.com/open?id = 0B_b9EpRt -zyHVW54dkQzcXdUTXM
基本上我有这两种方法:
private void hideSystemUI() {
getActivity().getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
| View.SYSTEM_UI_FLAG_IMMERSIVE);
}
private void showSystemUI() {
getActivity().getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
Run Code Online (Sandbox Code Playgroud)
我将此onScrollListener设置为RecyclerView以隐藏和显示状态栏,具体取决于滚动:
mFragmentListBinding.fragListRvMovies.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (dy > 5) {
// hideSystemUI();
// SystemUIHelper.hide(getActivity());
hideSystemUI();
} else if (dy < -5) { …Run Code Online (Sandbox Code Playgroud) 我搜索了一个解决方案,但找不到,所以我会在这里问:
我正在尝试在 mainActivity 中使用 setText 命令,直到现在我使用过:
MainActivity.this.runOnUiThread(new Runnable() {
public void run() {
textViewPrograss.setText(finalI + "");
}
});
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试做同样的事情,但是来自另一个类,所以我不能使用:MainActivity.this。
我试图使用我在另一个问题上找到的代码但没有成功,这是代码:
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Log.d("UI thread", "I am the UI thread");
}});
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我正在构建一个Android应用程序并试图通过使用计时器类来实现幻灯片演示.第一个图像加载正常,然后我的应用程序崩溃.知道问题可能是什么吗?
import android.app.Service;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.IBinder;
import android.service.dreams.DreamService;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.widget.ImageView;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
public class screenSaver extends DreamService {
ArrayList<Bitmap> imageList = new ArrayList<Bitmap>();
int slideCounter = 0;
ImageView slide;
Cursor images;
private int counter = 0;
public screenSaver() {
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
setInteractive(false);
setFullscreen(true);
setContentView(R.layout.screen_saver);
databaseHelper dbHelper = new databaseHelper(this);
SQLiteDatabase db = …Run Code Online (Sandbox Code Playgroud) 我有一个已更新的 TextView,但在我最小化并重新打开应用程序之前我看不到刷新。这是执行该操作的代码。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bleAdapter = ((BluetoothManager) getSystemService(BLUETOOTH_SERVICE)).getAdapter();
Set<BluetoothDevice> pairedDevices = bleAdapter.getBondedDevices();
for (BluetoothDevice device : pairedDevices) {
device.connectGatt(this, true, new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
super.onConnectionStateChange(gatt, status, newState);
TextView state;
switch (newState) {
case BluetoothProfile.STATE_CONNECTED:
state = (TextView)findViewById(R.id.state);
state.setText("Connected = True");
state.setTextColor(Color.GREEN);
break;
case BluetoothProfile.STATE_DISCONNECTED:
state = (TextView)findViewById(R.id.state);
state.setText("Connected = False");
state.setTextColor(Color.RED);
break;
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
我需要刷新那个 TextView 吗?我做错了什么吗?
如何在ui线程上运行任务.我试图在ui线程上运行任务
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,
"Mytask finished",
Toast.LENGTH_SHORT).show();
}
});
Run Code Online (Sandbox Code Playgroud)