标签: android-lifecycle

android - 我的应用程序未显示在最近的应用程序列表中

我正在开发一个应用程序,并且刚刚意识到它没有显示在最近的应用程序列表中.

我在应用程序中有2个活动,无论我在按Home键时我在哪个活动,该应用程序都不会显示在最近的应用程序列表中.

我已经看到了这个问题:SO问题但是将类别内容放在清单中并不适用于我.

以下是我的清单的一部分:

<application android:label="@string/app_name" >

    <service android:name=".UploadService" android:exported="false" />
    <service android:name=".DownloadService" android:exported="false" />

    <activity android:label="@string/app_name"
        android:excludeFromRecents="true"
        android:screenOrientation="portrait" 
        android:name="com.test.DOHSMain" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name="com.test.DOHSChange"
        android:label="@string/app_name" >
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>
Run Code Online (Sandbox Code Playgroud)

有谁知道我做错了什么?

注意:我在第二个活动DOHSChange上添加了标签,以防万一有帮助但是那条线路在那里似乎没有做任何事情.

谢谢你的时间

android android-manifest android-lifecycle

0
推荐指数
1
解决办法
2800
查看次数

finish()调用后的活动生命周期

我想知道是否onSaveInstance(),onPause()并且onStop()如果我打电话finish()或生命周期直接跳转到onDestroy().

我还想知道是否onRetainNonConfigurationInstance()总是调用android.support.v4库,或者只是因为配置更改而重新创建活动(当活动停止并放在backstack上时我可以信任吗?)

谢谢

android android-lifecycle android-support-library

0
推荐指数
1
解决办法
3614
查看次数

如果用户手动杀死应用程序,则从其离开的位置恢复活动

我正在处理一个应用程序,其中我从活动A(主要活动)移动到活动B到活动C.所有这一切都正常,但问题发生在用户通过从任务托盘中删除它杀死应用程序.

要理解我的问题,说用户从A移动到B然后C,但在完成活动C中的任务之前,用户杀死了应用程序.因此,当用户再次通过按下应用程序图标打开应用程序时,我想启动用户在杀死应用程序时的最后一个活动C,而不是Android的默认行为(主要活动A)再次启动应用程序的新实例.

我尝试过的:

1)我尝试使用"onSaveInstanceState"和"onRestoreInstanceState",但我认为它们在方向改变时使用,或者我们通过按后退按钮返回.

2)我试图将所有内容保存在"onPause"中,因为当活动被破坏时,暂停调用99.99%次,并且通过使用静态标志我打开了最后一个活动,它对我有用,但我想要一些好的示例或技术来完成这项工作.

所以任何人都可以帮我实现同样的目标.. ??

我请求其他成员提供代码示例.

提前致谢.

java android android-lifecycle android-activity

0
推荐指数
1
解决办法
113
查看次数

RecyclerViewCalendar 不能为空

我目前正在创建一个自定义对话框来显示从 00:00 到 23:59 的时间,我使用 kotlin 作为开发语言。我的问题是,当我打开对话框时,回收站视图出现错误。这是我的代码

日历对话框类

class CalendarDialog : DialogFragment() {

    /**
     * Define variables
     */
    private val mDaysList : MutableList<Days> = ArrayList()
    private val dayMonthYear = "2018-06-14" //TODO fetch the date of today

    /**
     * Initialize the adapter
     */
    private val adapter = CalendarAdapter(mDaysList)

    /**
     * Initialize the layout manager
     */
    private fun getLinearLayoutManager(): LinearLayoutManager {
        return LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false)
    }

    private fun initView() {
        setDataListItems()
        recyclerViewCalendar?.adapter = adapter
        recyclerViewCalendar?.layoutManager = getLinearLayoutManager()
        recyclerViewCalendar?.setHasFixedSize(true)
    }

    override fun onCreateView(inflater: …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-fragments kotlin android-recyclerview

0
推荐指数
1
解决办法
1834
查看次数

在销毁Activity之前将数据传递给Fragment

我有

活动A->片段A

[由Fragment A我决定创建Activity B]

片段A - >活动B

当我按返回按钮时,我返回到Fragment A包含数据列表的位置。按下后退按钮时,我想更新此列表。不,我不在本地存储数据,并且发出另一个请求太昂贵了。有没有简单的方法可以通过按[返回从活动B到片段A]的后退按钮传递修改的对象X?怎么样?

android fragment android-lifecycle android-activity

0
推荐指数
1
解决办法
50
查看次数

嵌套片段:onSaveInstanceState 之后无法执行此操作

我刚刚发现使用 API 24 的 Pixel 模拟器出现永久性崩溃。我的真实设备和其他一些模拟器没有此错误。

我正在做的事情如下:在一个片段中,我尝试使用以下代码添加另一个片段:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    val fragmentTransaction = requireFragmentManager().beginTransaction()
    val fragment = ComposableTableReportFragment.newInstance(null)
    fragmentTransaction.add(R.id.tableContainer, fragment)
    fragmentTransaction.commit()
Run Code Online (Sandbox Code Playgroud)

这会导致我的应用程序启动时发生以下崩溃。

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: net.pokeranalytics.android, PID: 20332
    java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
        at androidx.fragment.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:2080)
        at androidx.fragment.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:2106)
        at androidx.fragment.app.BackStackRecord.commitInternal(BackStackRecord.java:683)
        at androidx.fragment.app.BackStackRecord.commit(BackStackRecord.java:637)
        at net.pokeranalytics.android.ui.fragment.StatisticsFragment.initUI(StatisticsFragment.kt:71)
        at net.pokeranalytics.android.ui.fragment.StatisticsFragment.onViewCreated(StatisticsFragment.kt:62)
Run Code Online (Sandbox Code Playgroud)

我已经尝试过各种方法,因为崩溃非常频繁,但似乎每个案例都是独特的,并且没有找到适合我的解决方案。谢谢你的帮助!

android android-lifecycle android-fragments kotlin

0
推荐指数
1
解决办法
1280
查看次数

NotFoundException:绑定字符串资源时的字符串资源 ID #0x0

我目前正在使用绑定来使用 android 视图模型动态设置各种文本视图的文本。目前视图模型看起来像这样:

class MyViewModel(
  resources: Resources,
  remoteClientModel: Model = Model()
) : ObservableViewModel() {

  init {
    observe(remoteClientModel.liveData) {
      notifyChange()
    }

  fun getTextViewTitle(): String = when {
    someComplicatedExpression -> resources.getString(R.string.some_string, null)
    else -> resources.getString(R.string.some_other_string)
  }
}
Run Code Online (Sandbox Code Playgroud)

和 xml 布局:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
  <import type="android.view.View"/>

  <variable
    name="viewModel"
    type="my.app.signature.MyViewModel"/>
  </data>

  <androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
      android:id="@+id/title"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@{viewModel.textViewTitle}"
      android:textAlignment="center"
      android:textStyle="bold"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintTop_toBottomOf="parent"/>

  </androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)

但是我想删除注入到视图模型中的“资源:资源”,因为资源与活动耦合。代码现在只返回字符串资源 ID:

  fun getTextViewTitle(): Int = when {
    someComplicatedExpression -> R.string.some_string
    else -> R.string.some_other_string
  }
Run Code Online (Sandbox Code Playgroud)

因此,我删除了活动依赖项。编译器认为这很好,但它在运行时崩溃并出现以下异常:android.content.res.Resources$NotFoundException: …

android android-lifecycle

0
推荐指数
1
解决办法
2104
查看次数

Android 中什么时候调用 Viewmodel 的构造函数?

我正在浏览这个 Codelab: https: //developer.android.com/codelabs/android-lifecycles#6 它解释了如何在 ViewModel 中使用 SavedStateHandle 来避免进程死亡。ViewModel的构造函数如下:

    private SavedStateHandle mState;

    public SavedStateViewModel(SavedStateHandle savedStateHandle) {
       mState = savedStateHandle;
    }
Run Code Online (Sandbox Code Playgroud)

并且viewmodel在Activity中初始化如下:

    mSavedStateViewModel = new ViewModelProvider(this).get(SavedStateViewModel.class);
Run Code Online (Sandbox Code Playgroud)

ViewModel 的构造函数何时被调用?而Viewmodel是如何获取savedStateHandleViewModel的参数的呢?

编辑:

我通过这篇博文找到了问题的答案: https://www.rockandnull.com/viewmodel-savedstate/

它表示,如果 是SavedStateHandle视图模型构造函数中的唯一参数,则by viewModels委托会自动将其提供给视图模型。

然而,如果我们有依赖注入框架(Hilt)提供的自定义参数的组合,例如:存储库,还有一些其他运行时参数,例如:选定的类别 ID 和 SavedStateHandle 来帮助我们在视图模型的构造函数中避免进程死亡- 我们如何向工厂提供所有这些参数?

请发布一个小例子以供我的理解

android viewmodel android-lifecycle

0
推荐指数
1
解决办法
612
查看次数

MainActivity 在新活动开始时被销毁?

我有一个以 ListView 作为主要活动的活动。选择列表中的一个项目时,它将启动新的活动,从选中的列表中显示有关项目的详细信息。代码运行良好,相关细节如下:

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Log.d("test","test");

    ListView listView=(ListView) findViewById(R.id.name_list);

    ListAdapter adapter=new SimpleAdapter(this,contactList,
            R.layout.list_item,new String[]{TAGS[2]},new int[]{R.id.list_name_display});

    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id){
            Intent intent=new Intent(MainActivity.this,SingleContactActivity.class);
            intent.putExtra(EXTRA_CONTACT_POSITION,position);
            startActivity(intent);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

新创建的活动具有作为父活动的主要活动,因此当我查看完它时,我按操作栏上的向上按钮返回到列表视图。但是,该Log.d(...)行告诉我,每次转到详细信息活动,然后返回主活动时,都会重新创建主活动。

我不想要这个和我读这个的方式:https : //developer.android.com/training/basics/activity-lifecycle/stopping.html是当新的活动开始时应该停止主要活动,并且然后开始,然后按向上按钮恢复。有人知道我的主要活动被破坏的原因吗?

谢谢您的帮助

编辑:清单文件

<uses-permission android:name="android.permission.INTERNET" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter> …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-activity

-1
推荐指数
1
解决办法
1316
查看次数

finish() 和 finishAndRemoveTask() 的区别

我在finish()方法和finishAndRemoveTask()方法之间几乎没有混淆。如果有人对此有所了解,请解释它们之间的区别。

android android-lifecycle

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