标签: android-lifecycle

Android生命周期:是否应该在启动时调用onResume()?

我正在尝试Android应用程序开发傻瓜的一个例子,这是一个简单的应用程序,切换手机的铃声模式.代码如下.

public class SilentModeToggleActivity extends Activity {

  private AudioManager mAudioManager;
  private boolean mPhoneIsSilent;

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
    checkIfPhoneIsSilent();
    setButtonClickListener();
  }

  @Override public void onResume() {
    super.onResume();
    checkIfPhoneIsSilent();
    toggleUi();
  }

  private void checkIfPhoneIsSilent() {
    int ringerMode = mAudioManager.getRingerMode();
    if (ringerMode == AudioManager.RINGER_MODE_SILENT) {
      mPhoneIsSilent = true;
    } else {
      mPhoneIsSilent = false;
    }
  }

  private void setButtonClickListener() {
    Button toggleButton = (Button) findViewById(R.id.toggleButton);
    toggleButton.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) { …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle

3
推荐指数
1
解决办法
4893
查看次数

Android生命周期哪个事件在生命周期中只触发一次?

我已经阅读了一些博客并访问了一些网站.我想知道在生命周期中哪一个事件只被触发了一次.在阅读博客后,我意识到该onCreate()方法在生命周期中只被触发一次.我不知道我是对还是错.现在我的问题是,我想解雇任何只有在我改变横向或纵向方向时触发一次的事件,而不是这个事件没有被触发意味着如果用户改变方向而不是未被触发的事件.我想知道在启动Activity之后哪个事件触发了一次.这个onCreate()

android android-lifecycle

3
推荐指数
1
解决办法
5996
查看次数

一些碎片在旋转时丢失

我用FragmentActivity我的几个碎片.当配置改变时(旋转时),系统会破坏并重新创建每个片段.
我尝试使用这个重新创建的片段

mFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_frame);
Run Code Online (Sandbox Code Playgroud)

并把它放到新的布局

getSupportFragmentManager().beginTransaction()
    .replace(R.id.fragment_frame, mFragment )       
    .commit();
Run Code Online (Sandbox Code Playgroud)

但遇到奇怪的行为:丢失了几个碎片.它们不会更多地显示在屏幕上.在他们的位置是空的.
虽然日志显示片段重新创建正常,但进一步显示片段再次被破坏,再次创建和销毁.

我为展示问题建立了更清晰,没有外壳的测试项目.
并且可以证明结果(插入图片的声誉不够)
活动开始图片
活动旋转图片

A,B,C,D是一个fragments
如你所见,配置改变后一些片段丢失(B,D)

告诉我我做错了什么

这是帮助的代码(编辑:将代码推送到gitHub以便更容易尝试)

https:// github.com/nailgilaziev/TestFragmentsRetain
Run Code Online (Sandbox Code Playgroud)

p/s抱歉链接

旋转设备后,这里记录猫

MainActivity: onPause Activity
MainActivity: onStop Activity
MainActivity: onDestroy Activity
A: onDestroyview
A: onDestroy
B: onDestroyview
B: onDestroy
C: onDestroyview
C: onDestroy
D: onDestroyview
D: onDestroy
MainActivity: onCreate Activity
A: onCreate
B: onCreate
C: onCreate
D: onCreate
MainActivity: replaced
MainActivity: onStart Activity
A: onCreateView
B: onCreateView
C: onCreateView
D: onCreateView

<--before …
Run Code Online (Sandbox Code Playgroud)

android rotation android-lifecycle android-fragments

3
推荐指数
1
解决办法
4014
查看次数

Android - 将传感器读数写入.txt文件.用户界面冻结

基本上,我正在尝试将传感器数据写入.txtSD卡中的文件中.

当我设置为(int i = 0; i%2 == 0; i ++)时,它完全正常工作,即.txt每2个样本将数据写入文件.

但是如此代码所示,我将5更改为1,即我希望每个样本都写入文件中.一旦我运行它,UI就会冻结.

有人可以帮我解决这个问题吗?

可以通过创建另一个线程来修复吗?(这样说准确吗?)

我是新手,因此只能粗略地知道问题可能是由于线程问题.

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements SensorEventListener {

    EditText txtData;
    Button startButton;
    Button stopButton;

    File myFile;
    FileOutputStream fOut;
    OutputStreamWriter myOutWriter;
    BufferedWriter myBufferedWriter;
    PrintWriter myPrintWriter;


    private SensorManager …
Run Code Online (Sandbox Code Playgroud)

multithreading android android-lifecycle

3
推荐指数
1
解决办法
2787
查看次数

从Launcher菜单处理应用关闭事件

我想要做的是知道用户何时从Android Launcher的菜单关闭应用程序,该菜单在主页按钮长按时打开:

在此输入图像描述

我想在用户关闭应用程序时执行一些操作.

实际上,我希望用户每次离开应用程序时都会注销,但只要他能在此关闭应用程序,我就必须处理此事件然后进行操作.

我试图谷歌这个,但我找不到任何考虑这一点.

我不想覆盖onStop()或onDestroy(),只要用户可以回到应用程序然后,在这种情况下我不必进行更改.不建议这个.当用户完全关闭应用程序时,我只想进行更改.

所以我的问题是:

  • 有没有什么onApplicationDestroy()

  • 当用户以这种方式关闭应用程序时,是否可以与服务器建立连接并传递一些值?

android android-lifecycle ondestroy android-activity android-recents

3
推荐指数
1
解决办法
2747
查看次数

保证替代onDestroy()?

我试图执行一些代码,每当我的活动被杀害,但不是当它只是移动到背景(所以只是调用它的onPause()是不是一个解决方案),我理解onDestory()是不能保证调用.我一直在寻找并没有找到办法做到这一点.我怎样才能解决这个问题?可能吗?

lifecycle android android-lifecycle ondestroy onpause

3
推荐指数
1
解决办法
578
查看次数

在活动的onPause()或onStop()状态下运行代码

我的Android应用程序中有一个功能,每次用户尝试编辑他或她的个人资料时都需要运行.在我的应用程序中有两个部分的编辑配置文件(请不要问为什么,它背后有一个非常漫长的繁琐原因).如果用户决定取消所有内容,我需要恢复用户在编辑配置文件的第一部分所做的更改.我在第二部分编辑个人资料发了取消按钮,但我的问题是,如果有什么用户按下返回按钮或设备上的HOME键和应用程序调用onPause()onStop()?如何在活动的这两个阶段运行相同的代码?那些知道如何将代码放在不同状态的活动的人吗?我只是创建一个函数onPause()并将代码粘贴在那里吗?那会有用吗?

android android-lifecycle onpause android-activity

3
推荐指数
2
解决办法
1758
查看次数

在onNewIntent之前调用onPause的NFC意图 - 如何知道onPause调用的来源?

在启用Foreground Dispatch的应用程序中扫描NFC标签时,onPause()之前会调用此标签onNewIntent().是否有可能获得NFC意图,onPause()以便我可以根据意图的来源停止(或不停止)处理?

由于活动位于前台,因此在扫描标签时不应暂停/恢复活动,并且因为我有必须停止或启动onPause/的任务onResume,您可以看到问题.

getIntent().getAction()始终是"主",但肯定必须有一种方式来获得意图的更准确的描述?或者在进入之前无法知道它是NFC的意图onNewIntent()

android foreground nfc android-intent android-lifecycle

3
推荐指数
1
解决办法
923
查看次数

ComponentCallbacks2的onTrimMemory()未被调用

我已经实现了ComponentCallbacks2,并且从未调用过onTrimMemory。我正在尝试使用Application类和自定义生命周期来管理内存。任何帮助,不胜感激。

public class MemoryManager implements ComponentCallbacks2 {
    private static List<MemoryInfo> memInfoList = new ArrayList<>();

    public interface MemoryInfo {
        void releaseMemory();
    }

    public static void registerMemoryListener(MemoryInfo memoryInfo) {
        memInfoList.add(memoryInfo);
    }

    public static void unregisterMemoryListener(MemoryInfo memoryInfo) {
        memInfoList.remove(memoryInfo);
    }

    @Override
    public void onTrimMemory(int level) {
        Log.i("TEST", "onTrimMemory called"); // does not get called
        switch (level) {
            case ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW:
                try {
                    for (int i = memInfoList.size() - 1; i >= 0; i--) {
                        try {
                            memInfoList.get(i).releaseMemory(); // is this correct implementation?
                        } catch …
Run Code Online (Sandbox Code Playgroud)

java android android-lifecycle

3
推荐指数
2
解决办法
1930
查看次数

发送失败结果ResultInfo | java.lang.IllegalStateException:无法在onSaveInstanceState之后执行此操作

我有简单的应用程序首先我显示MainActivity然后MainActivity变得可见我显示TransparentActivity之后onClick我杀了TransparentActivity我创建并显示对话框.在上一步中我得到错误

错误

Failure delivering result ResultInfo{who=null, request=1234, result=-1, data=Intent {  }} to activity {com.example.kylu.layout/com.example.kylu.layout.GuidePhotoAlbum}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
Run Code Online (Sandbox Code Playgroud)

主要活动

public class MainActivity extends FragmentActivity
{
public static boolean flag=false;
    private static int REQUEST_CODE = 1234;

    @Override public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mylayout);
    }

@Override
protected void onResume() {
    super.onResume();
    //transparentShows only once
    if(!flag)
    {
        Intent i = new Intent(this, TransparentTip.class);
        startActivityForResult(i, REQUEST_CODE);
        flag=true;
    }
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (REQUEST_CODE == …
Run Code Online (Sandbox Code Playgroud)

android dialog onresume android-lifecycle onsaveinstancestate

3
推荐指数
1
解决办法
723
查看次数