相关疑难解决方法(0)

如何在Android上检测UI线程?

是否有一种强大的方法来检测Thread.currentThread()应用程序中的Android系统UI线程是否存在?
我想在我的模型代码中放置一些断言,断言只有一个线程(例如 ui线程)访问我的状态,以确保不需要任何类型的同步.

android

111
推荐指数
5
解决办法
3万
查看次数

WebView方法对同一线程错误

我有一个android程序(webview中的Java + html).我可以从javascript调用Java代码.但另一种方式停止工作(在eclipse中更新后).

所以这就是我想要做的

  • 制作一个webview(工作)
  • 在javascript中调用AndroidFunction.test(); (工作)
  • java test()函数调用webView.loadUrl("javascript:helloBack()"); (!不再工作了)

我试图让它在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)

javascript android android-webview

78
推荐指数
3
解决办法
4万
查看次数

android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3147)

知道为什么会出现这种崩溃吗?跟踪只有本机代码,因此很难跟踪它.发生在三星Galaxy S3平台4.1.2当我运行里面的动画Fragment,当动画结束时我叫notifyDataSetChangedFragmentStatePagerAdapter.该问题不是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)

android

10
推荐指数
1
解决办法
2682
查看次数

Android屏幕闪烁显示/隐藏系统栏

问题

当用户向上滚动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)

java xml android android-layout android-recyclerview

8
推荐指数
1
解决办法
880
查看次数

在另一个类的 UI 线程上运行

我搜索了一个解决方案,但找不到,所以我会在这里问:

我正在尝试在 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)

有什么建议?

java android android-studio

5
推荐指数
2
解决办法
6981
查看次数

Java Timer幻灯片

我正在构建一个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)

java android timer

1
推荐指数
1
解决办法
249
查看次数

在 TextView.setText 之后刷新视图

我有一个已更新的 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 吗?我做错了什么吗?

android refresh textview

1
推荐指数
1
解决办法
2417
查看次数

从片段运行ui线程上的任务

如何在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)

java multithreading android

0
推荐指数
1
解决办法
1万
查看次数