【发布时间】:2018-05-19 11:34:03
【问题描述】:
我found 该应用程序由于某些Native crash 而在没有logcat 条目的情况下崩溃。与 Android Studio 2.3.3 一样,logcat 默认设置了 Verbose 和 No 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));
}
}
这就是 MainActivity 中 MapsActivity 被解雇的地方。
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