小编roc*_*cko的帖子

Android Maps API需要openGL es 2

Maps v2文档说明:

由于Google Maps Android API的第2版需要OpenGL ES版本2,因此您必须在AndroidManifest.xml中添加<uses-feature>元素作为元素的子 manifest元素:

<uses-feature   
   android:glEsVersion="0x00020000"  
   android:required="true"/>` 
Run Code Online (Sandbox Code Playgroud)

这会向外部服务通知该要求.特别是,它可以防止Google Play商店在不支持OpenGL ES版本2的设备上显示您的应用.

事实上,exception如果不在清单中,它会抛出一个.我不想在商店中过滤我的应用程序,我计划继续使用旧设备的旧地图,并且只有在运行时检测到所需的功能时才显示新地图,而不是在安装之前检测到.

那我该怎么做?是否必须是多个APKs不同的东西manifests

android google-maps-android-api-2

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

片段的onClickListener在onDestroyView之后调用

我有一个问题在哪里ListFragment.onListItemClick被称为onDestroyView.我在现场收到大量的错误报告(每天10到20个活跃用户),但我发现重现它的唯一方法就是在点击整个屏幕时敲击后退按钮.有数百名用户真的这样做吗?这是跟踪:

java.lang.IllegalStateException: Content view not yet created
at au.com.example.activity.ListFragment.ensureList(ListFragment.java:860)
at au.com.example.activity.ListFragment.getListView(ListFragment.java:695)
at au.com.example.activity.MyFragment.onListItemClick(MyFragment.java:1290)
at au.com.example.activity.ListFragment$2.onItemClick(ListFragment.java:90)
at android.widget.AdapterView.performItemClick(AdapterView.java:301)
at android.widget.AbsListView.performItemClick(AbsListView.java:1519)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3278)
at android.widget.AbsListView$1.run(AbsListView.java:4327)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5293)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

从调用造成getListView().getItemAtPositionMyFragment.onListItemClick(1290 MyFragment).如何getView在单击处理程序回调期间返回null?我还确定片段在此阶段已分离,isAdded()为false,并且getActivity为null.

一种解决方法是getListViewlistView回调中的传入 替换public void onListItemClick(ListView listView, View v, int position, long id),但是其他函数仍然需要更新UI的其他部分,因此这只会将问题移到其他地方.相反,我把回调归为onDestroyView:

public void onDestroyView() {           
        mHandler.removeCallbacks(mRequestFocus);
        if(mList!=null){ …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-fragments

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

内存在后端堆栈中出现大量碎片

我有一个活动,用户可以从一个片段进展到另一个片段.片段启动,下载一些数据并显示它(以及从资源中绘制一些图标等).用户可以继续向前移动片段,直到他们喜欢(直到他们感到无聊?).

问题是,OutOfMemoryError最终会发生(在32mb vm堆上大约90个片段之后).90看起来确实很多,但我在现场看到了这样的内存错误报告,所以这可能是在低端设备上发生的.我确保我在onCreateView中创建的任何视图都在onDestroyView中无效.我的片段所拥有的唯一其他对象(据我所知)是它在开始时下载的数据,通常只有10-50kb.

我的第一个问题是,这是正常的吗?我可以期望'只'能够在后栈中拥有~90个片段吗?或者我在某个地方有内存泄漏,我可以做些什么?

如果用户离开我的应用程序,并且Android决定终止整个进程以释放内存,那么当用户返回使用的内存时,由于整个状态已从bundle恢复,因此更少.如果用户然后反向通过后栈,那么当然每个片段都是从savedinstancestate创建/恢复的.

所以我的第二个问题是,有没有办法强迫这种情况发生?即,'如果后面的堆栈中有> 50个碎片,那么开始杀死底部的碎片到savedInstanceState?'

android android-fragments

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

服务结构可靠的字典性能,拥有100万个密钥

我正在使用一个约100万个密钥的可靠字典来评估Service Fabric的性能.我得到了相当令人失望的结果,所以我想检查我的代码或我的期望是否错误.

我有一个初始化的字典 dict = await _stateManager.GetOrAddAsync<IReliableDictionary2<string, string>>("test_"+id);

id 对于每次测试运行都是唯一的.

我用一个字符串列表填充它,如"1-1-1-1-1-1-1-1-1","1-1-1-1-1-1-1-1-2", "1-1-1-1-1-1-1-1-3"......最多576,000项.字典中的值没有使用,我目前只使用"1".

将所有项目添加到字典大约需要3分钟.我必须一次将事务拆分为100,000,否则它似乎永远挂起(在您需要之前,事务中的操作数是否有限制CommitAsync()?)

//take100_000 is the next 100_000 in the original list of 576,000
using (var tx = _stateManager.CreateTransaction())
{
    foreach (var tick in take100_000) {
        await dict.AddAsync(tx, tick, "1");
    }
    await tx.CommitAsync();
}
Run Code Online (Sandbox Code Playgroud)

之后,我需要遍历字典来访问每个项目:

using (var tx = _stateManager.CreateTransaction())
{

    var enumerator = (await dict.CreateEnumerableAsync(tx)).GetAsyncEnumerator();

    try
    {
        while (await enumerator.MoveNextAsync(ct))
        {
            var tick = enumerator.Current.Key;                
            //do something with tick                    
        }
    }
    catch (Exception ex)
    {
        throw ex; …
Run Code Online (Sandbox Code Playgroud)

azure-service-fabric

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

如何在build.gradle中使用最终解析的applicationId

说我有以下build.gradle

android{
    defaultConfig{
        applicationId "com.example.base"
    }
    buildTypes{
        release{
            minifyEnabled true
        }
        debug{
            applicationIdSuffix ".dev"
            minifyEnabled false
        }
    }
    productFlavors{
        free{
            applicationId "com.example.free"
        }
        paid{
            applicationId "com.example.paid"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想将生成的应用程序ID添加到strings.xml,如下所示:

resValue "string", "app_package", applicationId
Run Code Online (Sandbox Code Playgroud)

因此,我可以targetPackage在首选项xml中定义的意图中使用此值

但是该值会根据我在该行中放置的内容而有所不同:

  • defaultConfig->“ com.example.base”(始终为基本ID,无用)
  • productFlavours.free->“ com.example.free”(问题是调试构建不会更改为“ com.example.free.dev”)
  • productFlavours->错误,无法构建
  • buildTypes.debug->错误,无法构建

通过使用applicationIdSuffix,我需要gradle才能解析最终的ID,然后才能使用它。我怎么做?

android gradle android-resources android-gradle-plugin android-flavors

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