小编Kas*_*sen的帖子

NameNotFoundException webview

我从Crashlytics收到错误,表明某些设备缺少com.google.android.webview.这怎么可能呢?

java.lang.RuntimeException: Unable to start activity   ComponentInfo{com.myapp.app/com.myapp.ReaderActivity}: android.view.InflateException: Binary XML file line #29: Error inflating class com.myapp.MyWebView
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
       at android.app.ActivityThread.access$800(ActivityThread.java:144)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:135)
       at android.app.ActivityThread.main(ActivityThread.java:5221)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: android.view.InflateException: Binary XML file line #29: Error inflating class com.myapp.MyWebView
       at android.view.LayoutInflater.createView(LayoutInflater.java:633)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.createCustomViewInternal(SourceFile:206)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.access$000(SourceFile:20)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater$PrivateWrapperFactory2.onCreateView(SourceFile:297)
       at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:177)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(SourceFile:60)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
       at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(SourceFile:228)
       at …
Run Code Online (Sandbox Code Playgroud)

android proguard webview inflate-exception android-5.0-lollipop

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

无法在HUAWEI设备上展开RemoteViews:MediaSessionCompat和NotificationCompat.MediaStyle

当我尝试在运行Android 5.0.1的HUAWEI P8 lite设备上显示通知时,我的应用程序崩溃(它在Nexus和Samsung设备上运行正常).我的大部分代码都来自Ian Lake以正确方式播放的视频媒体播放(Big Android BBQ 2015).我的所有代码都在Android服务中.如果我删除代码:

builder.setStyle(new android.support.v7.app.NotificationCompat.MediaStyle()
            .setShowActionsInCompactView(0, 1)
            .setMediaSession(mMediaSessionCompat.getSessionToken()).setShowCancelButton(true)
            .setCancelButtonIntent(MediaStyleHelper.getActionIntent(this, KeyEvent.KEYCODE_MEDIA_STOP)));
Run Code Online (Sandbox Code Playgroud)

然后应用程序不会崩溃,并显示带有图像和标题的通知.但缺少媒体操作按钮.

堆栈跟踪:

FATAL EXCEPTION: 
main Process: com.app.debug, PID: 21600 android.app.RemoteServiceException: 
Bad notification posted from package com.app.demo.debug: Couldn't expand RemoteViews for: 
StatusBarNotification(pkg=com.app.demo.debug user=UserHandle{0} id=1344663 tag=null score=0 key=0|com.app.demo.debug|1344663|null|10121: Notification(pri=0 contentView=com.app.demo.debug/0x109007f vibrate=null sound=null defaults=0x0 flags=0x62 color=0x00000000 category=transport actions=2 vis=PUBLIC))
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1534)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5538)
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:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Run Code Online (Sandbox Code Playgroud)

码:

private void setUpAsForeground(Book book) 
{

    updateMetaData(book);
    startForeground(NOTIFICATION_ID, setupAudioNotification());
}

public void …
Run Code Online (Sandbox Code Playgroud)

android android-notifications android-mediasession

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

使用游标加载器进行排球或服务

当我从Web服务下载数据时,我几乎总是使用服务.我将结果存储在数据库中,并使用游标加载器在我的视图中显示结果.但谷歌发布网络库后,我已经变得有些困惑了.排球库使用异步任务而不是服务,它不使用游标.我认为我应该避免异步任务并将我的数据存储在数据库中,以便我可以正确处理方向更改 - 而不会丢失数据并且需要再次下载数据.所以我的问题是,我什么时候应该使用Volley而不是我自己的下载策略?

service android cursor android-volley

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

Android Studio检测到GoogleApiClient导致内存泄漏

我创建了一个包含一个类的新项目,并从此示例中获取了以下代码:https: //developers.google.com/app-indexing/android/publish#add-app-indexing-api-calls

当我多次旋转设备然后在Android Studio中单击Dump Java Heap然后单击Analyze.我会得到一个结果显示我的MainActivity已泄露.

我创建这个示例项目的原因是因为我有一个存在内存泄漏问题的现有应用程序(StrictMode和Android Studio这样说),我的结论是我的AppIndex代码导致了问题.

它是Android Studio中的错误还是真正的内存泄漏?

public class MainActivity extends AppCompatActivity {


private GoogleApiClient mClient;
private Uri mUrl;
private String mTitle;
private String mDescription;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mClient = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
    mUrl = Uri.parse("http://examplepetstore.com/dogs/standard-poodle");
    mTitle = "Standard Poodle";
    mDescription = "The Standard Poodle stands at least 18 inches at the withers";
}


public Action getAction() {
    Thing object = new Thing.Builder()
            .setName(mTitle)
            .setDescription(mDescription)
            .setUrl(mUrl)
            .build();

    return new Action.Builder(Action.TYPE_VIEW)
            .setObject(object) …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks google-play-services android-studio android-app-indexing

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

Android 架构组件和 LiveData,太多 MutableLiveData 对象?

在发布 android 架构组件之前,我开始从事一个项目,在该项目中,我拥有自己的 ViewModel,该 ViewModel 与 Fragment 具有相同的生命周期,并且 ViewModels 状态保存在 Loader 内的 StateObject 中,以便状态可以在方向更改后幸免于难。ViewModel 通过接口与 Fragment 通信。这很有效,因为 ViewModel 和 Fragment 具有相同的生命周期。我的 ViewModel 包含各种状态。它有一个 isLoading 布尔值、isEmptyStateVisible 布尔值等等。每次状态改变时,我都会调用类似 view.notifyIsLoadingChanged(true/false) 的东西,在这种情况下,Fragment 将显示或隐藏一个微调器。

现在我将更改我的实现以将新的 ViewModel 与 LiveData 一起使用。实现 LiveData 的最快方法是更改​​我对 ViewModel 正在使用的 UI 界面的实现。所以我可以保留我当前的实现,只添加这个 UI 界面实现:

public class LiveDataProductReviewSheetUI extends LiveDataUI implements ProductReviewSheetUI {
    public final MutableLiveData<ReviewViewModelState> ratingDescChanged = new MutableLiveData<>();
    public final MutableLiveData<ReviewViewModelState> ratingChanged = new MutableLiveData<>();
    public final MutableLiveData<ReviewViewModelState> reviewChanged = new MutableLiveData<>();
    public final MutableLiveData<ReviewViewModelState> reviewValid = new MutableLiveData<>();
    public final …
Run Code Online (Sandbox Code Playgroud)

android android-livedata android-viewmodel android-architecture-components

6
推荐指数
0
解决办法
1465
查看次数

泄漏金丝雀检测 MediaBrowserServiceCompat 示例应用程序中的内存泄漏

我创建了一个实现 MediaBrowserServiceCompat 的测试应用程序。我已遵循本指南:\n https://developer.android.com/guide/topics/media-apps/audio-app/building-a-mediabrowserservice \n创建了 MediaPlaybackService 和 MainActivity。我添加了泄漏金丝雀,并在 onDestroy 方法中添加了 AppWatcher.objectWatcher.watch(this) 。打开和退出应用程序时,leak canary 会发现泄漏:

\n\n
6153 bytes retained\n    \xe2\x94\xac\n    \xe2\x94\x9c\xe2\x94\x80 android.service.media.MediaBrowserService$ServiceBinder\n    \xe2\x94\x82    Leaking: UNKNOWN\n    \xe2\x94\x82    GC Root: Global variable in native code\n    \xe2\x94\x82    \xe2\x86\x93 MediaBrowserService$ServiceBinder.this$0\n    \xe2\x94\x82                                        ~~~~~~\n    \xe2\x94\x9c\xe2\x94\x80 androidx.media.MediaBrowserServiceCompat$MediaBrowserServiceImplApi26$MediaBrowserServiceApi26\n    \xe2\x94\x82    Leaking: UNKNOWN\n    \xe2\x94\x82    MediaBrowserServiceCompat$MediaBrowserServiceImplApi26$MediaBrowserServiceApi26 does not wrap an activity context\n    \xe2\x94\x82    \xe2\x86\x93 MediaBrowserServiceCompat$MediaBrowserServiceImplApi26$MediaBrowserServiceApi26.mBase\n    \xe2\x94\x82                                                                                      ~~~~~\n    \xe2\x95\xb0\xe2\x86\x92 com.example.mediabrowsertestapp.MediaPlaybackService\n    \xe2\x80\x8b     Leaking: YES (ObjectWatcher was watching this)\n    \xe2\x80\x8b     MediaPlaybackService does not wrap an activity context\n    \xe2\x80\x8b     key = 11f40383-1498-4743-9f20-208cbd2839a1\n    \xe2\x80\x8b     watchDurationMillis = 5191\n …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks android-service leakcanary mediabrowserservice

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