我在打电话,finish()但我的活动一直在继续.
我有一个活动,由主活动屏幕中的菜单调用.在我的activity的onCreate()方法中,我有以下代码片段:
// Make sure there are some events in the list.
if (theEventArrayList.isEmpty()){
Toast.makeText(this, "Event List is empty", Toast.LENGTH_LONG).show();
finish();
}
SummarizeCurrentEvent();
graphEvents();
Run Code Online (Sandbox Code Playgroud)
如果列表为空,则会显示Toast,我可以在调用时设置断点finish().如果我从调试器中的那个步骤开始直接进入SummarizeCurrentEvent().我以为finish()会退出活动.这不是这种情况吗?我在哪里可以找到有关此方法的更多信息?
我有一个具有单个根Activity的应用程序.我最近引起了我的注意,任何一种强制关闭我的活动导致它重新启动,我不知道为什么会发生这种情况.如果我强制执行未捕获的异常或使用"长按后强制关闭"选项,它们都会产生相同的结果.
我唯一的猜测是某种形式的怪癖与保留对Activity的某些部分的引用有关,只有我在应用程序级别没有任何一些WeakReference条目.
相关的logcat条目:
05-25 08:25:49.137: INFO/ActivityManager(18449): Displayed uk.co.randomicon.rstb/.TreeBuilderActivity: +8s82ms
05-25 08:25:54.222: DEBUG/dalvikvm(18546): GC_EXPLICIT freed 12K, 57% free 3640K/8327K, external 8323K/10136K, paused 72ms
05-25 08:25:55.373: WARN/InputManagerService(18449): Got RemoteException sending setActive(false) notification to pid 19122 uid 10069
05-25 08:25:59.217: DEBUG/dalvikvm(18646): GC_EXPLICIT freed 128K, 48% free 2980K/5703K, external 0K/0K, paused 67ms
05-25 08:26:00.238: DEBUG/dalvikvm(18991): GC_CONCURRENT freed 343K, 51% free 2794K/5639K, external 303K/532K, paused 3ms+3ms
05-25 08:26:02.950: INFO/Process(18449): Sending signal. PID: 19554 SIG: 9
05-25 08:26:02.980: INFO/ActivityManager(18449): Process uk.co.randomicon.rstb (pid 19554) has died.
05-25 …Run Code Online (Sandbox Code Playgroud) 即使在运行时授予了WRITE_EXTERNAL_STORAGE,App也无法写入Android 6.0上的外部存储(我在模拟器上进行测试); 除非应用程序被杀死并重新启动.
来自AndroidManifest.xml的代码段
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
的build.gradle
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
......
minSdkVersion 15
targetSdkVersion 23
}
Run Code Online (Sandbox Code Playgroud)
每当我需要写入外部存储器(用于备份)时,我会检查是否有权限.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
getActivity().getBaseContext().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_REQUEST_RW_EXTERNAL_STORAGE);
mPendingAction = PendingAction.Backup;
} else {
BackupRestoreService.startBackup(getActivity().getBaseContext());
}
Run Code Online (Sandbox Code Playgroud)
我也有以下内容
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.d("SettingsActivity", "grantResultsLength: " + grantResults.length);
if (requestCode == PERMISSION_REQUEST_RW_EXTERNAL_STORAGE) {
Log.d("SettingsActivity", "grantResultsLength: " + grantResults.length);
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) …Run Code Online (Sandbox Code Playgroud)