【问题标题】:Application crash without logcat entry没有 logcat 条目的应用程序崩溃
【发布时间】:2018-05-19 11:34:03
【问题描述】:

found 该应用程序由于某些Native crash 而在没有logcat 条目的情况下崩溃。与 Android Studio 2.3.3 一样,logcat 默认设置了 VerboseNo filters 选项: 那么解决本机崩溃或识别这些问题的方法是什么崩溃?

我的应用程序在打开 MapsActivity 两次以上即第三次(编辑: 现在是第四次)点击打开时崩溃了。

这是我的MapsActivity,它从MainActivity 接收Location List,并在这些位置的地图上添加标记。

import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.location.Location;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.UiSettings;
import com.google.android.gms.maps.model.BitmapDescriptor;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;
ArrayList<Location> locs = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

    Bundle bundle = getIntent().getExtras();
    String jsonString = bundle.getString("KEY_LOCATIONS");

    Gson gson = new Gson();
    Type listOfLocationType = new TypeToken<List<Location>>() {
    }.getType();
    locs = gson.fromJson(jsonString, listOfLocationType);
}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    setUpMap();
}

public void setUpMap() {

    mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
       return;}
    mMap.setMyLocationEnabled(true);
    mMap.getUiSettings().setMyLocationButtonEnabled(true);
    mMap.getUiSettings().setCompassEnabled(true);

    addMarkeratLocation();
}

public void addMarkeratLocation() {
    int i;
    double lt=0.0,lg=0.0;
    BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.mipmap.dottt);
    LatLng addpoint = new LatLng(0.0, 0.0);
    for (i = 0; i < locs.size(); i++) {
        lt=locs.get(i).getLatitude();
        lg=locs.get(i).getLongitude();
        addpoint = new LatLng(lt,lg );
        mMap.addMarker(new MarkerOptions().position(addpoint).icon(icon));

    }
    mMap.moveCamera(CameraUpdateFactory.newLatLng(addpoint));
    LatLng camloc= new LatLng(lt,lg);
    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(camloc, 15));

}
}



这就是 MainActivityMapsActivity 被解雇的地方。

direction.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getBaseContext(), "Showing directions", Toast.LENGTH_LONG).show();
            TinyDB tinydb = new TinyDB(MainActivity.this);
            olati=tinydb.getDouble("destination_lati",lati);
            olongi=tinydb.getDouble("destination_longi",longi);

            Gson gson = new Gson();
            String jsonString = gson.toJson(locs);
            Intent intent = new Intent(MainActivity.this,MapsActivity.class);
            intent.putExtra("KEY_LOCATIONS",jsonString);
            startActivity(intent);
        }
    });

我不知道我应该发布什么 Logcat。我该如何解决?提前致谢。

编辑: 添加了错误 Logcat
这是应用程序崩溃的地方

12-06 00:12:06.190 18296-18307/com.example.acer.mylocationmap A/libc:致命信号 11 (SIGSEGV),代码 1,tid 18307 (FinalizerDaemon) 中的故障地址 0x40 12-06 00:12:07.800 3624-3624/? E/审计: type=1701 msg=audit(1512499327.795:2175): auid=4294967295 uid=10495 gid=10495 ses=4294967295 subj=u:r:untrusted_app:s0 pid=18307 comm="FinalizerDaemon" reason="内存违规" 信号 = 11 12-06 00:12:07.845 2845-20348/? E/android.os.Debug: ro.product_ship = true 12-06 00:12:07.845 2845-20348/? E/android.os.Debug: ro.debug_level = 0x4f4c 12-06 00:12:07.930 2845-2925/? E/InputDispatcher: channel ~ Channel 被不可恢复地破坏,将被处理掉! 12-06 00:12:07.930 2845-2925/? E/InputDispatcher: channel ~ Channel 被不可恢复地破坏,将被处理掉! 12-06 00:12:07.990 20349-20349/? E/Zygote:MountEmulatedStorage() 12-06 00:12:07.990 20349-20349/? E/合子:v2 12-06 00:12:07.995 20349-20349/? E/Zygote:访问信息:0 12-06 00:12:07.995 20349-20349/? E/SELinux:[DEBUG] get_category:变量 seinfo:默认灵敏度:NULL,类别:NULL 12-06 00:12:15.020 2845-2889/? E/ViewRootImpl: sendUserActionEvent() mView == null

【问题讨论】:

  • 在过滤器中选择您的应用和设备,然后重新运行。
  • 您尝试过从“详细”更改为“错误”吗?
  • @Ninja 将此作为 logcat 中第一次崩溃的最后一行 A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0xd457b008 in tid 8634 (GLThread 31225)
  • @BluRe.CN 尝试但无法理解其中的任何内容...我应该发布“错误”logcat 吗?
  • 是的,分享您的错误日志。其他人认为,如果您的 GL 出现问题,可能会发生这种情况。我不认为谷歌地图会发生这种情况。你在哪里测试你的项目(模拟器或设备)?

标签: java android crash android-logcat


【解决方案1】:

检查您的构建变体是否在 build.gradle 文件中将调试设置为 true

这通常在应用程序的发布版本上设置为 false,因为这是发布到 Play 商店的要求。

【讨论】:

  • 应用程序或模块的build.gradle文件?这是你说的吗? buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
  • 你的模块 build.gradle 文件。我还看到您正在使用 android studio。 Android Studio 有一个内置调试器,因此您可以通过可疑代码放置断点(单击文件中的行号旁边,应该会出现一个红色斑点),并根据需要逐步执行,这应该有助于准确指出中断的位置。 debugging in android studio
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
相关资源
最近更新 更多