标签: android-lifecycle

我什么时候可以先测量视图?

所以我在尝试设置视图的背景可绘制时有点混乱.该代码依赖于知道视线的高度,所以我不能把它onCreate()onResume(),因为getHeight()返回0 onResume()似乎是最接近我可以得到虽然.我应该在哪里放置如下所示的代码,以便在显示给用户时背景发生变化?

    TextView tv = (TextView)findViewById(R.id.image_test);
    LayerDrawable ld = (LayerDrawable)tv.getBackground();
    int height = tv.getHeight(); //when to call this so as not to get 0?
    int topInset = height / 2;
    ld.setLayerInset(1, 0, topInset, 0, 0);
    tv.setBackgroundDrawable(ld);
Run Code Online (Sandbox Code Playgroud)

height layout android android-lifecycle

59
推荐指数
3
解决办法
5万
查看次数

如何知道我的应用何时被杀?

我需要知道用户何时杀死我的应用程序(强制停止).我一直在阅读android生命周期,它具有onStop()onDestroy()功能,这些与用户在我的应用程序上结束的每个活动相关,但不是在用户强制停止或杀死我的应用程序时.

有没有办法知道用户何时杀死应用程序?

android android-lifecycle

59
推荐指数
3
解决办法
5万
查看次数

在片段中显示片段viewpager

我有一个包含ViewPager的片段.ViewPager与包含一组片段的适配器相关联.

在加载父片段后,我遇到了一条IllegalStateException消息:java.lang.IllegalStateException: Recursive entry to executePendingTransactions.

一些研究使我得出结论,系统无法在另一个片段中显示片段,但是似乎有一些迹象表明可以通过使用ViewPager完成此操作(ViewPager中的一个错误与其他片段一起使用)).

实际上,如果我向我的父片段添加一个按钮,mPager.setAdapter(mAdapter)在按下时调用我的ViewPager,ViewPager会成功加载.这不太理想.

那么问题必须与片段生命周期有关.因此,我的问题是:有没有其他人找到解决这个问题的办法,如果是,怎么办?

有没有办法在片段事务之后延迟ViewPager上的适配器设置?

这是我的父片段代码:

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    mView = inflater.inflate(R.layout.team_card_master, container, false);
    mViewPager = (ViewPager)mView.findViewById(R.id.team_card_master_view_pager);

    final Button button = (Button)mView.findViewById(R.id.load_viewpager_button);
    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            mViewPager.setAdapter(mAdapter);
            button.setVisibility(View.GONE);
        }
    });

    mAdapter = new ViewPagerAdapter(getFragmentManager());
 //     mViewPager.setAdapter(mAdapter);

    return mView;
}
Run Code Online (Sandbox Code Playgroud)

和适配器:

public class ViewPagerAdapter extends FragmentPagerAdapter {
    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-fragments android-viewpager android-nested-fragment

55
推荐指数
4
解决办法
4万
查看次数

RecyclerView适配器的生命周期是什么?

我正在从适配器中的演示者请求图像:

  @Override
  public void onBindViewHolder(SiteAdapter.ViewHolder holder, int position)
  {
    Site site = sites.get(position);
    holder.siteName.setText(site.getName());
    requestHolderLogo(holder, site.getLinks().getLogoUrl());
  }

  private void requestHolderLogo(final ViewHolder holder, final String logoUrl)
  {
    compositeSubscription.add(
      presenter.bitmap(logoUrl)
        .subscribe(
          bitmap -> {
            holder.siteLogo.setImageBitmap(bitmap);
            holder.siteLogo.setVisibility(View.VISIBLE);
          },
          error -> {
            holder.siteName.setVisibility(View.VISIBLE);
          })
    );
  }
Run Code Online (Sandbox Code Playgroud)

我应该在ViewHolder重新使用时取消订阅.这很容易.

但是当视图被销毁时如何停止所有订阅?我也应该使演示者引用无效以避免内存泄漏

android android-lifecycle android-recyclerview

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

使用dagger 2的Android生命周期库ViewModel

我有一个ViewModel类,就像在Architecture指南Connecting ViewModel和repository部分中定义的那样.当我运行我的应用程序时,我得到运行时异常.有谁知道怎么解决这个问题?我应该不注入ViewModel吗?有没有办法告诉使用Dagger创建模型?ViewModelProvider

public class DispatchActivityModel extends ViewModel {

    private final API api;

    @Inject
    public DispatchActivityModel(API api) {
        this.api = api;
    }
}
Run Code Online (Sandbox Code Playgroud)

引起:java.lang.InstantiationException:java.lang.Class在java.lang.Class.newInstance(Native Method)的android.arch.lifeModelProvider $ NewInstanceFactory.create(ViewModelProvider.java:143)中没有零参数构造函数在Android.arch.lifecycle.ViewModelProvider.get上的android.arch.lifecycle.ViewModelProviders $ DefaultFactory.create(ViewModelProviders.java:143)android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:128)(ViewModelProvider.java) :96)com.example.base.BaseActivity.onCreate(BaseActivity.java:65)at com.example.dispatch.DispatchActivity.onCreate(DispatchActivity.java:53)at android.app.Activity.performCreate(Activity.java: 6682)在android.app.Anstrumentation.callActivityOnCreate(Instrumentation.java:1118)的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2619)android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727). android.app.ActivityT上的app.ActivityThread.-wrap12(ActivityThread.java)在android.app.ActivityThread.main上的android.os.Handler.dispatchMessage(Handler.java:102)上的android.os.Looper.loop(Looper.java:154)处获取$ H.handleMessage(ActivityThread.java:1478) (ActivityThread.java:6121)

android android-lifecycle dagger-2

48
推荐指数
2
解决办法
2万
查看次数

为什么我的onResume被调用两次?

基本上,这就是我正在做的事情

1)设置AlarmManager以执行BroadcastReceiver(BCR)

Intent intent = new Intent(m_Context, BCR.class);  
intent.putExtras(extras);  
PendingIntent pendingIntent = PendingIntent.getBroadcast(m_Context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);  
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, StartTime, pendingIntent)  
Run Code Online (Sandbox Code Playgroud)

2)从BCR启动MyActivity

@Override  
public void onReceive(Context context, Intent intent) {  
    Intent newIntent = new Intent(context, MyActivity.class);
    newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);  
    context.startActivity(newIntent);  
}
Run Code Online (Sandbox Code Playgroud)

3)如果MyActivity未打开,请将其打开

@Override  
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState); 
    getWindow().addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
    getWindow().addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    getWindow().addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);
    setContentView(R.layout.myactivity);  
} 

@Overide  
protected void onNewIntent(Intent intent) {  
    super.onNewIntent(intent);  
}  
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我注意到当MyActivity打开时,它的流程如下:

onCreate/onNewIntent - > onResume - > onPause - > onResume

我不确定为什么它会立即进行onPause.我注意到这只发生在标志打开被筛选时.有谁知道为什么会这样?有什么办法可以防止这种行为?

java android android-lifecycle android-activity

47
推荐指数
5
解决办法
3万
查看次数

NavUtils.navigateUpTo()不会启动任何Activity

我有两个活动

  • MainActivity
  • DeepLinkActivity

我设置了所有内容,NavUtils以便像在这里,这里这里建议一样进行导航.

我想要实现的是:

  1. DeepLinkActivity深层链接开始
  2. 按下来
  3. MainActivity

只要我的应用程序在最近的应用程序中有任何任务,一切都很好.

但是,当我从最近的应用程序中删除我的应用程序时,它的行为如下:

  1. 从最近的应用中移除我的应用
  2. DeepLinkActivity深层链接开始
  3. 按下来
  4. 我的应用程序关闭,就像按下时一样

我调试了代码,然后发现,NavUtils.shouldUpRecreateTask()返回false. upIntent将所有内容设置为正常,就像我的Component设置一样.但是,NavUtils.navigateUpTo()行为就像打电话一样finish().没有日志声明,没有.

任何想法,如何解决?

AndroidManifest.xml中

<activity
    android:name=".DeepLinkActivity"
    android:parentActivityName="my.package.MainActivity">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="my.package.MainActivity"/>
    <intent-filter>
        <!-- Some intent filter -->
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

DeepLinkActivity.java

@Override
public boolean onOptionsItemSelected(final MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            Intent upIntent = NavUtils.getParentActivityIntent(this);
            if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
                // create new …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-activity

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

Android - 执行停止未恢复的活动

当我将我的应用程序推送到后台,并做一些其他的东西,如whatsapp或短信,onResume它很好.
但是我最近发现,当我的应用程序在后台打开/启动Facebook应用程序时,我不知道会发生什么......
但是onResume,应用程序行为异常......
不要做它需要做的事情,但是当我回到主页并回来它工作正常请帮助我...如何解决它?

包含所有消息的Logcat(不带过滤器)

10-15 12:53:59.899: I/Adreno-EGL(32033): Remote Branch: quic/LNX.LA.3.5.1_RB1.1
10-15 12:53:59.899: I/Adreno-EGL(32033): Local Patches: NONE
10-15 12:53:59.899: I/Adreno-EGL(32033): Reconstruct Branch: AU_LINUX_ANDROID_LNX.LA.3.5.1_RB1.04.04.02.048.018 + f2fd134 +  NOTHING
10-15 12:53:59.924: D/OpenGLRenderer(32033): Enabling debug mode 0
10-15 12:54:00.000: V/AlarmManager(7677): sending alarm Alarm{42cfa490 type 3 android}
10-15 12:54:00.110: I/ActivityManager(7677): Displayed uk.org.humanfocus.hfi/.EvaluateTrainingActivity: +838ms
10-15 12:54:00.114: D/WifiStateMachine(7677): handleMessage: E msg.what=151572
10-15 12:54:00.114: D/WifiStateMachine(7677): processMsg: ConnectedState
10-15 12:54:00.114: D/WifiStateMachine(7677): processMsg: L2ConnectedState
10-15 12:54:02.258: V/AlarmManager(7677): sending alarm Alarm{42ebd600 type 1 com.facebook.katana}
10-15 12:54:02.274: V/AlarmManager(7677): sending alarm Alarm{42ec0ff0 …
Run Code Online (Sandbox Code Playgroud)

android background onresume android-lifecycle android-activity

40
推荐指数
3
解决办法
8万
查看次数

什么时候onRestoreInstanceState调用?

对不起我的不解,但我是android开发的新手.

我有一个活动A和活动B的应用程序,我从活动A转到活动B.当我离开活动A时,onSaveInstanceState方法被调用,但是当我回到活动A时(来自活动B在同一个应用程序中) ),onCreate方法中的bundle 为null.

我该怎么办,以保存活动A以前的状态?我只想存储应用程序生命周期的数据.

有人可以帮我弄这个吗?

这是我的活动A的代码:

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

    if (savedInstanceState != null)
    {
        Log.v("Main", savedInstanceState.getString("test"));
    }
    else
    {
        Log.v("Main", "old instance");
    }
}  

@Override
public void onSaveInstanceState(Bundle savedInstanceState) 
{
    Log.v("Main", "save instance");

    savedInstanceState.putString("test", "my test string");

    super.onSaveInstanceState(savedInstanceState);
}


public void buttonClick(View view)
{
    Intent intent = new Intent(this, Activity2.class);
    startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)

这是我的活动B的代码,当我按下按钮返回活动A:

public void onBack(View view)
{
    NavUtils.navigateUpFromSameTask(this);
}
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle onrestoreinstancestate onsaveinstancestate

38
推荐指数
2
解决办法
4万
查看次数

Android如何在标签更改时停止刷新片段

我有以下代码:

MainActivity.java

package com.erc.library;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.FragmentTransaction;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Environment;
import android.os.StrictMode;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;

import com.erc.sayeghlibrary.adapter.TabsPagerAdapter;

public class MainActivity extends FragmentActivity implements
        ActionBar.TabListener {

    private ViewPager viewPager;
    private TabsPagerAdapter mAdapter;
    private ActionBar actionBar;
    // Tab titles
    private String[] tabs = { "Stories", "Dictionaries", "eBooks"};

    @Override
    protected …
Run Code Online (Sandbox Code Playgroud)

java android android-lifecycle android-fragments android-viewpager

38
推荐指数
3
解决办法
4万
查看次数