조각에 BroadcastReceiver 등록 및 등록 해제
내 앱에는 3 개의 조각 탭이있는 작업 표시 줄이 있습니다. 두 번째 조각에서는 BroadcastReceiver를 등록 및 등록 취소합니다. 나는에서 수신기의 등록을 취소 onPause
하고에 등록 onCreateView
하고에 onResume
.
getActivity().registerReceiver(this.batteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
과
getActivity().unregisterReceiver(batteryInfoReceiver);
1) 동일한 수신자를 두 번 (onCreateView 및 onResume에서) 등록해도 괜찮습니까? (무해합니까?)
2) onResume에 리시버를 등록하는 것으로 충분합니까?
의 수명주기 를 살펴보십시오 Fragments
.
onCreateView () : 프래그먼트가 처음으로 사용자 인터페이스를 그릴 때 시스템이이를 호출합니다. 프래그먼트에 대한 UI를 그리려면 프래그먼트 레이아웃의 루트 인이 메서드에서 View를 반환해야합니다. 조각이 UI를 제공하지 않는 경우 null을 반환 할 수 있습니다.
onResume () : 조각이 실행중인 활동에 표시됩니다.
onPause () : 일반적으로 현재 사용자 세션 이후에도 유지되어야하는 변경 사항을 커밋해야하는 곳입니다 (사용자가 돌아 오지 않을 수 있기 때문).
결론:
그래서하는 것이 좋습니다 유일한 내부 수신기 등록 onResume()
및 등록 취소 내부에onPause()
있기 때문에 onCreateView()
뷰 계층 만 다룬다. 수신기와는 관련이 없습니다. 그래서 그것은 해롭지는 않지만 확실히 쓸모가 없습니다.
도움이 되길 바랍니다 !!
나를 위해 작동하는 코드는 다음과 같습니다.
내부 레이아웃 :
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="sendInternalBroadcast"
android:text="Broadcast"/>
조각 레이아웃 :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center">
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Fragment One"
android:id="@+id/fragmentoneTextView1"/>
</LinearLayout>
주요 활동 내부 :
public void sendInternalBroadcast(View view)
{
Intent intent = new Intent();
intent.setAction("com.codingbadly.stefanronnkvist.simplebroadcastreceiver.setup");
intent.putExtra("From", "sendInternalBroadcast");
sendBroadcast(intent);
}
파편:
import android.app.*;
import android.content.*;
import android.os.*;
import android.view.*;
import android.widget.*;
public class FragmentOne extends Fragment
{
View view;
Context _context;
PendingIntent pi;
BroadcastReceiver br;
AlarmManager am;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
view = inflater.inflate(R.layout.fragmentone, container, false);
setup();
return view;
}
@Override
public void onAttach(Context context)
{
super.onAttach(context);
_context = context;
}
@Override
public void onDestroyView()
{
super.onDestroyView();
_context.unregisterReceiver(br);
}
private void setup()
{
br = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent i)
{
TextView tv = (TextView)view.findViewById(R.id.fragmentoneTextView1);
tv.setText("onReceive");
}
};
_context.registerReceiver(br, new IntentFilter("com.codingbadly.stefanronnkvist.simplebroadcastreceiver.setup"));
pi = PendingIntent.getBroadcast(_context, 0, new Intent("com.codingbadly.stefanronnkvist.simplebroadcastreceiver.setup"), 0);
am = (AlarmManager)(_context.getSystemService(Context.ALARM_SERVICE));
}
}
행운을 빕니다 .. 스테판 Ronnkvist
OnResume 등록 :
context.registerReceiver(receiver,IntentFilter(BroadCastAction.action_success))
onPause 등록 취소 :
context.unregisterReceiver(mContactBroadCastReceiver);
'program tip' 카테고리의 다른 글
양식에서 _lpchecked =“1”은 무엇입니까? (0) | 2020.11.30 |
---|---|
getSupportFragmentManager ()와 getChildFragmentManager ()의 차이점은 무엇입니까? (0) | 2020.11.30 |
ByteArrayOutputStream에서 파일 만들기 (0) | 2020.11.30 |
비 차단 IO 대 비동기 IO 및 Java 구현 (0) | 2020.11.30 |
Java MessageFormat-작은 따옴표 사이에 값을 삽입하려면 어떻게해야합니까? (0) | 2020.11.30 |