小编rup*_*eet的帖子

V/FA:处理排队的服务任务:1后跟V/FA:不活动,断开与AppMeasurementService的连接

由于它在下面的控制台输出中可见,因此应用程序通常需要7-10秒来处理服务,并且通常无法执行此操作.每次启动都会发生这种情况

为什么需要这么长时间?是因为服务在放弃之前尝试连接多次?此外,这个输出背后的逻辑究竟是什么?

注意:我的应用程序中没有任何FirebaseAnalytics代码

09-26 23:34:48.998 /package V/FA: Processing queued up service tasks: 1
09-26 23:34:54.009 /package V/FA: Inactivity, disconnecting from AppMeasurementService
09-26 23:34:57.357 /package V/FA: Activity paused, time: 89152495
09-26 23:34:57.383 /package V/FA: onActivityCreated
Run Code Online (Sandbox Code Playgroud)

的build.gradle(APP)

//Firebase
compile 'com.google.firebase:firebase-core:9.4.0'
compile 'com.google.firebase:firebase-database:9.4.0'
compile 'com.google.firebase:firebase-invites:9.4.0'
compile 'com.firebase:geofire-android:2.0.0'
compile 'com.firebaseui:firebase-ui:0.5.1'
Run Code Online (Sandbox Code Playgroud)

android firebase firebase-analytics

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

应该在这里传递已解析的像素维度而不是资源ID:getResource().getDimession*(ViewGroup.LayoutParams.WRAP_CONTENT)

TextView textView = new TextView(getActivity());
textView.setBackgroundResource(R.drawable.shape_item_talker_realm);
textView.setText(skill.skill_name);
textView.setTextSize(12);
textView.setPadding(12, 12, 12, 12);
textView.setTextColor(ContextCompat.getColor(getContext(), R.color.userIndexTagText));

ViewGroup.MarginLayoutParams lp = new ViewGroup.MarginLayoutParams(
    ViewGroup.LayoutParams.WRAP_CONTENT, 
    ViewGroup.LayoutParams.WRAP_CONTENT
);
lp.setMargins(0, 0, 15, 15);
Run Code Online (Sandbox Code Playgroud)

我想添加MarginLayoutParams到我的视图中.但是,它显示错误

应该在这里传递解析的像素维度而不是资源ID:getResource().getDimession*(ViewGroup.LayoutParams.WRAP_CONTENT)

我怎么解决这个问题?

android

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

引起:java.lang.IllegalStateException: Fragment already added

我的 MainActivityonStart()抛出IllegalStateException“片段已添加”消息。我究竟做错了什么?

public class MainActivity extends FragmentActivity implements ServiceConnection {

    @Override
    protected void onStart() {
        super.onStart();
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是异常堆栈跟踪:

java.lang.RuntimeException: 
Unable to start activity ComponentInfo{com.xxx/com.xxx.MainActivity}:
java.lang.IllegalStateException: Fragment already added: cj{38f8de4c #0 id=0x7f0b0079 cj}
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3190)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3300)
    at android.app.ActivityThread.access$1000(ActivityThread.java:211)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1705)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:145)
    at android.app.ActivityThread.main(ActivityThread.java:6946)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
    Caused by: java.lang.IllegalStateException: Fragment already added: cj{38f8de4c #0 id=0x7f0b0079 cj}
    at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1366)
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:734)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682)
    at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388)
    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607) …
Run Code Online (Sandbox Code Playgroud)

android fragment

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

如何在for循环中编写附加代码块

如何在简单的for循环中编写以下代码:

int asInt = (valueAsBytes[3] & 0xFF)
                | ((valueAsBytes[2] & 0xFF) << 8)
                | ((valueAsBytes[1] & 0xFF) << 16)
                | ((valueAsBytes[0] & 0xFF) << 24);
Run Code Online (Sandbox Code Playgroud)

java logical-operators

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

API 26上的覆盖权限错误

当我的应用程序尝试绘制系统覆盖图时,它会崩溃并告诉我2010窗口类型的权限被拒绝.但是,我要求用户ACTION_MANAGE_OVERLAY_PERMISSION在首次安装时授予教程活动.此外,这只发生在API 26上.我测试了所有其他支持的SDK,我能够绘制一个没有崩溃或错误的叠加层.

我用过

Settings.canDrawOverlay(context);
Run Code Online (Sandbox Code Playgroud)

它返回true.因此,似乎系统知道授予许可但问题仍然存在.

这是覆盖代码:

    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
    inflater.inflate(R.layout.view_driving, mRelativeLayout);

    WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
            PixelFormat.TRANSLUCENT);

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
        layoutParams.flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
    } else{
        layoutParams.flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
    }

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
        layoutParams.flags = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
    }

    int uiOptions = 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_STICKY;

    layoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;

    mRelativeLayout.setSystemUiVisibility(uiOptions);

    if(Settings.canDrawOverlays(mContext)){
        WindowManager windowManager = (WindowManager) mContext.getSystemService(WINDOW_SERVICE);
        windowManager.addView(mRelativeLayout, layoutParams); …
Run Code Online (Sandbox Code Playgroud)

permissions android android-8.0-oreo

5
推荐指数
0
解决办法
1625
查看次数

意图过滤:使用两个操作以及Launcher和Browsable类别

TL; DR我可以在一个intent-filter中使用两个动作和两个类别吗?

我的应用程序由一个活动和五个片段组成.我在这个活动中有一个Intent过滤器.

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

今天,我application在清单文件中的标签周围看到了一条lint消息"App无法通过Google索引......" .所以,我做了一些搜索,并且知道你可以用它来通过谷歌搜索索引你的应用程序.如果Android用户从chrome/systemBrowser浏览Web链接"www.example.com/myapp",他将被带到我的应用程序而不是网页.对?

现在,我必须向活动添加一个ActionView.而且,我的意图过滤器将成为,

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.LAUNCHER" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="http" android:host="www.example.com" android:pathPrefix="/myapp" />
 </intent-filter>
Run Code Online (Sandbox Code Playgroud)

但是,我已经读到使用两个动作并不好.这是一个逻辑OR操作.Intent-Filter只匹配其中一个:

    1. MAIN行动和启动类别的意图
    1. MAIN操作和BROWSABLE类别的意图
    1. 使用VIEW动作和LAUNCHER类别的意图
    1. 具有VIEW动作和BROWSABLE类别的意图

据我所知,它应该在第一个选项的设备上打开应用程序,当用户使用提供的"www.example.com/myapp"浏览浏览器时,它应该使用第一个和第四个选项从链接打开应用程序.

我看过这个问题,但我需要确定一个例子.

这令人困惑.我可能完全错了,请指导我.

android deep-linking intentfilter android-manifest android-intent

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

使用逻辑填充int [2000] [2000]时出现StackOverflow错误

我需要int[2000][2000]用一些逻辑来填充矩阵.

我填充数组的代码:

// n: (1 to 2000)
for(int i=0; i<n; i++){
    for(int j=0; j<n; j++){
        uniMatrix[i][j] = (((calc(i * j * i * j)) & 1) == 0) ? 0 : 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里:i * j * i * j是我对正方形的看法i*j.这calc()是一个用于获取值的方法.然后,我检查返回的值calc()是偶数还是奇数.如果它是偶数,我存储0在矩阵中(i, j),否则我存储1在其中.

我的calc()功能如下:

private static int calc(int n){

    // value of n=calc(1 | 2 | 3) is known
    if(n < 4) return …
Run Code Online (Sandbox Code Playgroud)

java stack-overflow recursion matrix

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

如果 Fragment 可见,则从 Service 或 BroadcastReceiver 更新 Fragment UI

长话短说

当片段的 UI(toggleButton) 从正在运行的服务在屏幕上可见时,我需要更新它。

背景

我有toggleButton一个片段(名为 homeFragment)。它显示Stop文本if(toggleButton.isChecked),否则显示Start文本。这toggleButton将启动和停止服务。

现在,有两种方法可以停止此服务。一种是再次点击toggleButton(停止服务),另一种是通过服务本身。

当此服务启动时,toggleButton显示“停止”文本。该服务创建粘性通知并this.stopSelf在之后调用。此通知有一个关闭此通知的按钮。此选项调用 aBroadcastReceiver来停止/取消通知。

问题/要求

现在,当通过通知按钮关闭服务时,如果应用程序可见或位于前台,我想toggleButton在片段上触发该应用程序以再次显示开始文本。如果 appActivity 处于后台/暂停/关闭状态,我不需要处理这个问题(我通过签sharedPrefs入来处理onCreate()

我试过:

  1. 使用布尔 SharedPref 键(例如isServiceRunning)来跟踪服务状态。在 中onCreate(),我保存了一个true布尔值。在 中onDestoy(),我保存了一个false布尔值。然后,我注册一个onSharedPreferencesChangeListenersharedPrefs(inside fragment)检查 的isServiceRunningsharedPrefkey 是否更改。并且,如果是的话,它会调用toggleButton.setChecked(false);

    这种方法很少奏效。有时有效,有时什么也没有发生。

  2. 使用a LocalBroadcastReceiver,但它有很多错误。喜欢,can't Instantiate Receiver: no empty method。我试图解决,但发现这需要很多工作。而且,除此之外,访问另一个类中的 Fragment 视图简直是一团糟,因为你必须为它们提供layout …

java android broadcastreceiver android-service android-fragments

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