【问题标题】:Play developer console: 2 error reports on 13k active usersPlay 开发者控制台:关于 13k 活跃用户的 2 个错误报告
【发布时间】:2012-06-06 20:12:15
【问题描述】:

作为初级开发人员,我有一个小问题。我创建了一个应用程序,该应用程序在过去 2 周内下载了很多,并且拥有 13k 活跃用户。我已经在几部(三星)手机上进行了测试,当然也在模拟器中进行了测试。我无法产生任何错误,因为应用程序很简单,我没想到它会这样做。

但今天我查看了我的 Play 开发者控制台,发现了 2 个错误报告。这是我应该关注的事情还是可以随机生成这个错误?例如,我知道糟糕的自定义 rom 会导致崩溃,我自己也经历过。

我将发布创建它的类,单击按钮时会播放选定的声音。单击按钮时出现 nullPointerException 崩溃之一,另一个是调用 mp.stop() 时生成的非法状态异常。对我来说,这似乎不可能产生错误,但我当然可能是错的。这是代码:

public class SoundActivity extends Activity implements OnClickListener,
    OnCheckedChangeListener {

Button btn;
MediaPlayer mp;
RadioGroup slct;
RadioButton radio0, radio1, radio2, radio3, radio4;
int t = 1;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.btclayout);
    initialize();
    btn.setOnClickListener(this);
    slct.setOnCheckedChangeListener(this);
    mp = MediaPlayer.create(this, R.raw.sound1);

}

public void initialize() {
    btn = (Button) findViewById(R.id.button1);
    slct = (RadioGroup) findViewById(R.id.radioGroup1);
    radio0 = (RadioButton) findViewById(R.id.radio0);
    radio1 = (RadioButton) findViewById(R.id.radio1);
    radio2 = (RadioButton) findViewById(R.id.radio2);
    radio3 = (RadioButton) findViewById(R.id.radio3);
    radio4 = (RadioButton) findViewById(R.id.radio4);

}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    mp.stop();
    mp.reset();
    switch (t) {
    case 1:
        mp = MediaPlayer.create(this, R.raw.sound1);
        break;
    case 2:
        mp = MediaPlayer.create(this, R.raw.sound2);
        break;
    case 3:
        mp = MediaPlayer.create(this, R.raw.sound3);
        break;
    }
    mp.start();
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    mp.release();
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    mp = MediaPlayer.create(this, R.raw.sound1);
}

@Override
public void onCheckedChanged(RadioGroup arg0, int arg1) {
    // TODO Auto-generated method stub
    switch (arg1) {
    case R.id.radio0:
        t = 1;
        break;
    case R.id.radio1:
        t = 2;
        break;
    case R.id.radio2:
        t = 3;
        break;
    case R.id.radio3:
        t = 4;
        break;
    case R.id.radio4:
        t = 5;
        break;
    }
}
}

编辑: 这是来自 Play 管理中心的堆栈跟踪:

java.lang.IllegalStateException 在 android.media.MediaPlayer._stop(本机方法)在 android.media.MediaPlayer.stop(MediaPlayer.java:1033) 在 com.ddroid.DisMyApp.SoundActivity.onClick(SoundActivity.java:57) 在 android.view.View.performClick(View.java:3549) 在 android.view.View$PerformClick.run(View.java:14400) 在 android.os.Handler.handleCallback(Handler.java:605) 在 android.os.Handler.dispatchMessage(Handler.java:92) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:4944) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 在 dalvik.system.NativeStart.main(Native Method)

第二个:

java.lang.NullPointerException 在 com.ddroid.DisMyApp.SoundActivity.onClick(SoundActivity.java:76) 在 android.view.View.performClick(View.java:2538) 在 android.view.View$PerformClick.run(View.java:9152) 在 android.os.Handler.handleCallback(Handler.java:587) 在 android.os.Handler.dispatchMessage(Handler.java:92) 在 android.os.Looper.loop(Looper.java:130) 在 android.app.ActivityThread.main(ActivityThread.java:3687) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:507) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 在 dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 发布实际的堆栈跟踪也会有所帮助

标签: android


【解决方案1】:

虽然这些错误不应该发生,但根据我的经验,用户总是会找到一种方法以非预期的方式使您的应用程序崩溃 :) 在这些失败中的每一个中,它都发生在 onClick() 中,所以我会包装 @ try/catch 中的 987654323@ 代码,然后简单地记录错误。您在开发者控制台中看到错误意味着用户遇到了Force Close 问题,因此捕获错误肯定更好。

在我见过的许多与状态相关的问题中,主要是用户在执行操作的同时在设备上进行旋转。有时使用Android Monkey也可以随机模拟出这类错误。

【讨论】:

    猜你喜欢
    • 2017-11-02
    • 2017-07-30
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多