在Developer Console中,我看到很多像这样的堆栈跟踪崩溃
java.lang.RuntimeException:
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2984)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045)
at android.app.ActivityThread.-wrap14(ActivityThread.java:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Native Method:0)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Caused by: java.lang.ClassCastException:
at com.myapp.ui.BaseActivity.getApp(BaseActivity.java:193)
at com.myapp.ui.BaseActivity.onCreate(BaseActivity.java:275)
at com.myapp.ui.CastActivity.onCreate(CastActivity.java:39)
at com.myapp.ui.MainActivity.onCreate(MainActivity.java:268)
at android.app.Activity.performCreate(Activity.java:6955)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
Run Code Online (Sandbox Code Playgroud)
BaseActivity的getApp方法是
public App getApp() {
return (App) getApplication();
}
Run Code Online (Sandbox Code Playgroud)
App类是
public class App extends MultiDexApplication { ...
Run Code Online (Sandbox Code Playgroud)
并且在manifest应用程序标记中包含对此类的引用
<application
android:name="com.myapp.App"
Run Code Online (Sandbox Code Playgroud)
98%的崩溃是针对Android 7.0,休息是7.1.没有其他Android版本受到影响.
编辑:我使用proguard所以它可以以某种方式相关但保持类
-keep class com.myapp.** { *;}
-keep interface com.myapp.** { *;}
Run Code Online (Sandbox Code Playgroud)
注意:它可能没有关系,但在相同的Android版本中,它看起来像App的onCreate方法有时不被调用.我观察它是因为在onCreate中创建的某些对象在从Service(由AlarmManager启动)或BroadcastReceiver访问时为null
有谁知道什么可以导致它,如何解决它或解决它?谢谢
编辑2:我最终得到了这样的东西:
public App getApp() …Run Code Online (Sandbox Code Playgroud) 我使用带游标适配器的下拉微调器.它包含例如1 - 100项.我选择例如项目50.项目被选中.下次当我打开微调器时,第一个可见行是第50项.当我打开微调器时,我将如何实现它将聚焦到第一个项目/第一个可见项目将是项目1?
我的意思是像列表中的自动滚动一样,因此下拉列表中的第一个可见项目是第一个而不是一个.
app无法在app拥有的目录中的外部存储folder/file上创建android 5(HTC HTC6525LVW os version: 5.0.1).
父文件夹由[getExternalFilesDirs(String type)][1]方法返回.
Sdcard 安装.
有其他人有这个问题或建议如何解决?
(不幸的是我没有这个设备来测试它)
编辑:从一个用户我知道,在此错误之前,她加密了SD卡,然后对其进行了格式化.
android android-file android-permissions android-5.0-lollipop
如何创建封闭漏斗?即我想看看有多少用户做了一些操作,然后卸载了应用程序.即.event_lost_game - >卸载.目前,渠道是开放的,因此它不会告诉您有多少用户制作了第1步,然后是第2步.它只显示了有多少用户单独制作了这两个步骤.
我在常见问题解答中找到了它,但不清楚你需要做什么.
看起来需要根据渠道中的所有事件创建开放渠道和受众,然后根据它过滤渠道.有经验的人吗?谢谢!
默认情况下,在操作栏列表中,所选项目的导航宽度与最宽项目一样宽.我想在所选项目中"wrap_content",因为它在谷歌+,gmail,映射Android应用程序.
有人知道这么热吗?
我试图覆盖导航适配器的getView但它不起作用.它看起来这个视图被包含在另一个视图中,该视图的宽度最宽.我也尝试了带有微调器的actionbar.setCustom视图,但是微调器的行为是相同的.它使用最宽的项目宽度.
感谢所有建议,链接和帮助.


这是一个错误还是在准备时不可能释放,停止或杀死MediaPlayer?
我有一个MediaPlayer运行的实例,Service如果我停止,释放,将其设置为null,同时MediaPlayer处于准备状态,它会停止.但是,如果我停止,释放,如果它处于准备状态,则将其设置为null .
onPrepared()在停止,释放,设置为null后调用.一些解决方法吗?
我认为这是用户想要MediaPlayer在完成准备之前停止的常见用例.
我在连接管理器中偶尔会看到空指针异常.从意图服务我通过isOnWIFI(this)检查网络状态.在cm.getActiveNetworkInfo()行发生异常.这很奇怪,因为我在调用之前检查了null.注意:权限已设置.
public static boolean isOnWIFI(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
return cm != null
//here occurs NullPointerException
&& cm.getActiveNetworkInfo() != null
&& ((cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null && cm.getNetworkInfo(
ConnectivityManager.TYPE_WIFI).isConnected()));
}
Run Code Online (Sandbox Code Playgroud)
有没有想过为什么会这样?我无法调试它,因为它只是偶尔出现错误报告.我看到的唯一解决方案是将其放入try catch块.谢谢.
在开发者控制台 - Android vitals中,我看到警告该应用程序有"Stuck partial wake locks".在文档中,它被描述为
如果应用程序在后台运行时,部分唤醒锁定会被卡住(用户看不到应用程序的任何部分).
确实,应用程序在后台运行(播放音频),但我使用前台服务和整个时间应用程序保持锁定通知是可见的.
稍后您可以阅读文档
确保您应用的某些部分仍然在前台.例如,如果您需要运行服务,请改为启动前台服务.这可以直观地向用户显示您的应用仍在运行.
但它似乎不是真的.Android vitals是否忽略该app具有前台服务?有没有人有类似的经历?
编辑:这是来自我的AudioService的代码
PowerManager.WakeLock mWakeLock = null;
boolean mHasWakeLock;
void acquireLocks(){
if (!mHasWakeLock) {
final PowerManager pm = (PowerManager)
context.getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,TAG);
mWakeLock.setReferenceCounted(false);
mWakeLock.acquire();
mHasWakeLock = true;
}
}
void releaseLocks() {
if (mWakeLock != null) {
mWakeLock.release();
mWakeLock = null;
}
mHasWakeLock = false;
}
void play(){
startForeground(NOTIFICATION_ID, notification);
acquireLocks();
}
void stop(){
releaseLocks();
stopForeground(true);
}
Run Code Online (Sandbox Code Playgroud) 是否可能对作为远程视图一部分的按钮产生连锁效应?(使用自定义布局或窗口小部件的通知)
我尝试将按钮背景设置为drawable notification_material_media_action_background:
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/ripple_material_dark"/>
Run Code Online (Sandbox Code Playgroud)
但它没有效果.通知源代码中使用相同的背景,并且通知按钮会产生连锁反应.这是来自Notification source的代码,它创建了动作按钮(具有涟漪效果):
private RemoteViews More ...generateMediaActionButton(Action action) {
final boolean tombstone = (action.actionIntent == null);
RemoteViews button = new RemoteViews(mBuilder.mContext.getPackageName(),
R.layout.notification_material_media_action);
button.setImageViewResource(R.id.action0, action.icon);
button.setDrawableParameters(R.id.action0, false, -1,
0xFFFFFFFF,
PorterDuff.Mode.SRC_ATOP, -1);
if (!tombstone) {
button.setOnClickPendingIntent(R.id.action0, action.actionIntent);
}
button.setContentDescription(R.id.action0, action.title);
return button;
}
Run Code Online (Sandbox Code Playgroud)
唯一不同的是这条线:
button.setDrawableParameters(R.id.action0, false, -1,
0xFFFFFFFF,
PorterDuff.Mode.SRC_ATOP, -1);
Run Code Online (Sandbox Code Playgroud)
但是这个方法是@hide所以它不能被调用.
知道如何添加涟漪效果吗?谢谢!
android android-widget android-notifications android-remoteview material-design
我使用AVPlayer播放音频(流媒体或本地文件).对于这个音频,我想应用一些效果 - 提升音量,跳过静音,降低噪音,改变速度(以0.1为间隔).
我在android中通过创建自己的播放器,将不同的音频格式解码为pcm数据然后使用一些c库来修改它来做同样的事情.这很复杂.
是否可以使用AVPlayer或我该怎么做?类似于修改AVPlayer已解码的音频.是否有一些ios api(AVAudioEngine?)或框架(audioKit?)可以做到这一点?
谢谢!